enso/engine
Hubert Plociniczak d59714a29d
Support module imports using a qualified name (#3608)
This change allows for importing modules using a qualified name and deals with any conflicts on the way.
Given a module C defined at `A/B/C.enso` with
```
type C
type C a
```
it is now possible to import it as
```
import project.A
...
val x = A.B.C 10
```

Given a module located at `A/B/C/D.enso`, we will generate
intermediate, synthetic, modules that only import and export the successor module along the path.
For example, the contents of a synthetic module B will look like
```
import <namespace>.<pkg-name>.A.B.C
export <namespace>.<pkg-name>.A.B.C
```
If module B is defined already by the developer, the compiler will _inject_ the above statements to the IR.

Also removed the last elements of some lowercase name resolution that managed to survive recent
changes (`Meta.Enso_Project` would now be ambiguous with `enso_project` method).

Finally, added a pass that detects shadowing of the synthetic module by the type defined along the path.
We print a warning in such a situation.

Related to https://www.pivotaltracker.com/n/projects/2539304

# Important Notes
There was an additional request to fix the annoying problem with `from` imports that would always bring
the module into the scope. The changes in stdlib demonstrate how it is now possible to avoid the workaround of
```
from X.Y.Z as Z_Module import A, B
```
(i.e. `as Z_Module` part is almost always unnecessary).
2022-07-29 14:19:07 +00:00
..
language-server Add command for changing expression value (#3562) 2022-07-13 15:59:47 +00:00
launcher/src Update profiling CLI arguments (#3461) 2022-05-24 16:01:26 +03:00
polyglot-api/src Explicit self (#3569) 2022-07-27 17:45:36 +00:00
runner Explicit self (#3569) 2022-07-27 17:45:36 +00:00
runtime Support module imports using a qualified name (#3608) 2022-07-29 14:19:07 +00:00
runtime-instrument-id-execution/src/main/java/org/enso/interpreter/instrument Single (+patchable) LiteralNode (#3536) 2022-06-21 09:42:23 +00:00
runtime-instrument-repl-debugger/src/main/java/org/enso/interpreter/instrument Avoid crashing the engine when JS debugger statement is used (#3547) 2022-06-25 05:58:24 +00:00
runtime-instrument-runtime-server/src/main/java/org/enso/interpreter/instrument Register instruments/language in their own compilation units to fix the sbt build issues (#3509) 2022-06-13 14:09:08 +00:00
runtime-language-epb/src/main/java/org/enso/interpreter/epb Explicit self (#3569) 2022-07-27 17:45:36 +00:00
runtime-with-instruments/src/test Explicit self (#3569) 2022-07-27 17:45:36 +00:00
README.md Add a markdown style guide (#1022) 2020-07-21 13:59:40 +01:00

The Enso Engine

The Enso engine is the codebase responsible for compiling and executing Enso code, as well as providing language server functionality to users of the language. It is subdivided into two major components:

  • Language Server: The Enso language service.
  • Polyglot API: The truffle-boundary safe API for communication between the language server and the runtime.
  • Runner: The command-line interface for Enso.
  • Runtime: The compiler and interpreter for Enso.