enso/engine/language-server
Hubert Plociniczak 35e5ed53d2
Don't cancel aborted jobs immediately (#11375)
* Don't cancel aborted jobs immediately

Rather than cancelling Futures that capture jobs' logic,
this change introduces a two-level system:

- interrupt all jobs softly via ThreadInterrupted at safepoints
- if safepoint is not executed within some time period or it is
  but the job is still not cancelled, trigger a hard-interrupt
  by cancelling the job explicitly, if possible

Closes #11084.

* Only cancel Future when you mean it

Soft-cancelling a future only to later call it with `mayInterrupt` set
to `true` has no effect in the latter case.
Changed the logic so that interrupting a Future will really enforce it.

Ocassionally some commands should not attempt to run soft cancellations
- we know they will re-execute the program.

* Replace Thread.sleep with Future.get

No while loops etc, it's much easier to reason about what is soft and
hard interrupt supposed to do.

* Better comments/logs

* nit

* PR review

* Make test more robust
2024-11-05 10:33:02 +01:00
..
src Don't cancel aborted jobs immediately (#11375) 2024-11-05 10:33:02 +01:00
README.md Add a markdown style guide (#1022) 2020-07-21 13:59:40 +01:00

Enso Language Server

The Enso Language Server is responsibile for providing a remote-communication protocol for the runtime, exposing many of its features to the users. In addition it provides the backing service for much of the IDE functionality associated with the language. It encompasses the following functionality:

  • Introspection Services: Giving clients the ability to observe information about their running code including values, types, profiling information, and debugging.
  • Code Execution: The ability for clients to execute arbitrary Enso code in arbitrary scopes. This can be used in conjunction with the above to provide a REPL with an integrated debugger.
  • Code Completion: Sophisticated completion functionality that refines suggestions intelligently based on context.
  • Node Management: Tracking and providing the language server's internal node representation of the Enso program.
  • Code Analysis: Analysis functionality for Enso code (e.g. find usages, jump-to-definition, and so on).
  • Refactoring: Refactoring functionality for Enso code (e.g. rename, move, extract, and so on).
  • Type Interactions: Features for type-driven-development that allow users to interact with the types of their programs.