From cfcc8b29505ba8a1d9e7541bc86da85225341c28 Mon Sep 17 00:00:00 2001 From: doorgan Date: Mon, 18 Aug 2025 18:02:37 -0300 Subject: [PATCH 1/4] chore: update README.md and docs --- README.md | 208 ++++-------------------------------------- pages/architecture.md | 27 +++--- pages/development.md | 41 +++++++++ pages/glossary.md | 27 ++++-- pages/installation.md | 158 ++++++++++---------------------- 5 files changed, 137 insertions(+), 324 deletions(-) create mode 100644 pages/development.md diff --git a/README.md b/README.md index 2733d64f..bafd14c9 100644 --- a/README.md +++ b/README.md @@ -1,212 +1,42 @@ -[![Discord](https://img.shields.io/badge/Discord-5865F3?style=flat&logo=discord&logoColor=white&link=https://discord.gg/FvdkuVyted)](https://discord.gg/FvdkuVyted) -![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/lexical-lsp/lexical/elixir.yml) - -Lexical logo: Lexi the lynx - # Expert Expert is a next-generation language server for the Elixir programming language. -


- -### Note: Development on Lexical will slow while we transition to the new combined effort, Expert. - -## Features - - * Context aware code completion - * As-you-type compilation - * Advanced error highlighting - * Code actions - * Code Formatting - * Go To Definition - * Completely isolated build environment - -## What makes Lexical different? -There are a couple things that lexical does differently than other language servers. Let's look at what separates it from -the pack. - -#### Architecture - -When lexical starts, it boots an erlang virtual machine that runs the language server and its code. It then boots a -separate virtual machine that runs your project code and connects the two via distribution. This provides the following benefits: - - * None of lexical's dependencies will conflict with your project. This means that lexical can make use of dependencies to make developing in it easier without having to "vendor" them. It also means that you can use lexical to work on your project, **even if lexical depends on your project**. - * Your project can depend on a different version of elixir and erlang than lexical itself. This means that lexical can make use of the latest versions of elixir and erlang while still supporting projects that run on older versions. - * The build environment for your project is only aware of your project, which enables as-you-type compilation and error reporting. - * In the future, there is a possibility of having the lexical vm instance control multiple projects - -#### Ease of contribution - -Lexical has been designed to be easy to contribute to and work on. It features: - - * A consistent data model that represents the Language Server Protocol and `mix` tasks to generate new Language Server models. - * A clearly defined separation between the language server and project code - * A set of utilities that deal with manipulating code - * A set of unit tests and test cases that make testing new features easy. - -#### Focus on developer productivity - -Lexical is also built with an eye on increasing developer productivity, and approaches some common features a little bit -differently. For example, Lexical's code completion is _context aware_, which means that if you type `alias MyModule.|` -you will only receive completions for modules and not the names of functions in `MyModule`. This awareness will extend -to other areas, which means: - - * You won't see completions for random functions and types in strings. In fact, when extended to string literals, Lexical will only show you completions if you're inside of an interpolation (`"hello there #{na|}'`). - * If you're inside of a struct reference (`%StructModule.|`), you will only see modules listed that define structs, or are the parents of modules that define structs. - -Because of this focus, Lexical aims to deliver depth of features rather than breadth of them. We'll likely spend -more time making sure each thing we add works and feels _just right_ rather than adding a whole slew of features -that people mostly won't use. - -#### As you type compilation -Because your project is run in a separate virtual machine, we can compile the code that you're working on as you -type. This means you see errors _immediately_ rather than having to wait for a save. The result is you see and -fix typos, warnings, unused variables and a whole host of errors when they occur, which makes your code better, -faster. - ## Installation -Follow the [Detailed Installation Instructions](pages/installation.md) - -``` -mix package -``` - -Lexical will now be available in `_build/dev/package/lexical` - -If you would like to change the output directory, you can do so with the `--path` option - -``` -mix package --path /path/to/lexical -``` - -Lexical will be available in `/path/to/lexical`. - -## Development - -Lexical is intended to run on any version of Erlang 25+ and Elixir -1.15+. Before beginning development, you should install Erlang -`25.0` and Elixir `1.15.8` and use those versions when you're -building code. - -You should also look at the [complete compatibility -matrix](pages/installation.md#caveats) do see which versions are -supported. +You can download Expert from the [releases page](https://github.com/elixir-lang/expert/releases) for your +operating system and architecture. -You're going to need a local instance in order to develop lexical, so follow the [Detailed Installation Instructions](pages/installation.md) first. +For editor specific installation instructions, please refer to the [Installation Instructions](pages/installation.md) -Then, install the git hooks with - -``` -mix hooks -``` - -These are pre-commit hooks that will check for correct formatting and run credo for you. - -After this, you're ready to put together a pull request for Lexical! - -#### Benchmarks - -The `remote_control` project has a set of benchmarks that measure the speed of various internal functions and data structures. In order to use them, you first need to install [git large file storage](https://docs.github.com/en/repositories/working-with-files/managing-large-files/installing-git-large-file-storage), and then run `git pull`. Benchmarks are stored in the `benchmarks` subdirectory, and can be run via - -``` -mix benchmark /benchmarks/.exs -``` +### Nightly Builds -### Logging +If you want to try out the latest features, you can download a nightly build. -When lexical starts up, it creates a `.lexical` directory in the root -directory of a project. Inside that directory are two log files, -`lexical.log` and `project.log`. The `.lexical.log` log file contains -logging and OTP messages from the language server, while the -`project.log` file contains logging and OTP messages from the -project's node. While developing lexical, it's helpful to open up a -terminal and tail both of these log files so you can see any errors -and messages that lexical emits. To do that, run the following in a -terminal while in the project's root directory: +Using the GH CLI, you can run the following command to download the latest nightly build: ```shell -tail -f .lexical/*.log +gh release download nightly --pattern 'expert_linux_amd64' ``` -Note: These log files roll over when they reach 1 megabyte, so after a -time, it will be necessary to re-run the above command. - -### Debugging +Then point your editor to the downloaded binary. -Lexical supports a debug shell, which will connect a remote shell to a -currently-running language server process. To use it, `cd` into your -lexical installation directory and run +### Building from source -``` -./bin/debug_shell.sh -``` +To build Expert from source, you need Zig `1.14.1` installed on your system. -For example, if I would like to run the debug server for a server -running in your `lexical` project, run: - -``` -./bin/debug_shell.sh lexical -``` +Then you can run the following command: -...and you will be connected to a remote IEx session _inside_ my -language server. This allows you to investigate processes, make -changes to the running code, or run `:observer`. - -While in the debugging shell, all the functions in -`Expert.IEx.Helpers` are imported for you, and some common -modules, like `Lexical.Project` and `Lexical.Document` are -aliased. - -You can also start the lexical server in interactive mode via -`./bin/start_lexical.sh iex`. Combining this with the helpers that are -imported will allow you to run projects and do completions entirely in -the shell. - - *Note*: The helpers assume that all of your projects are in folders that are siblings with your lexical project. - -Consider the example shell session: - -``` -./bin/start_lexical.sh iex -iex(1)> start_project :other -# the project in the ../other directory is started -compile_project(:other) -# the other project is compiled -iex(2)> complete :other, "defmo|" -[ - #GenLSP.Structures.CompletionItem<[ - detail: "", - insert_text: "defmacro ${1:name}($2) do\n $0\nend\n", - insert_text_format: :snippet, - kind: :class, - label: "defmacro (Define a macro)", - sort_text: "093_defmacro (Define a macro)" - ]>, - #GenLSP.Structures.CompletionItem<[ - detail: "", - insert_text: "defmacrop ${1:name}($2) do\n $0\nend\n", - insert_text_format: :snippet, - kind: :class, - label: "defmacrop (Define a private macro)", - sort_text: "094_defmacrop (Define a private macro)" - ]>, - #GenLSP.Structures.CompletionItem<[ - detail: "", - insert_text: "defmodule ${1:module name} do\n $0\nend\n", - insert_text_format: :snippet, - kind: :class, - label: "defmodule (Define a module)", - sort_text: "092_defmodule (Define a module)" - ]> -] +```sh +just release-local ``` -The same kind of support is available when you run `iex -S mix` in the -lexical directory, and is helpful for narrowing down issues without -disturbing your editor flow. +This will build the Expert binary and place it in the `apps/expert/burrito_out` directory. You can then point your +editor to this binary. ### Other resources -* [Architecture](pages/architecture.md) -* [Glossary](pages/glossary.md) +- [Architecture](pages/architecture.md) +- [Development Guide](pages/development.md) +- [Glossary](pages/glossary.md) +- [Installation Instructions](pages/installation.md) diff --git a/pages/architecture.md b/pages/architecture.md index 76d7820f..9bbc240f 100644 --- a/pages/architecture.md +++ b/pages/architecture.md @@ -2,32 +2,27 @@ ## Project Structure -Lexical is designed to keep your application isolated from lexical's code. Because of this, lexical is structured as an umbrella app, with the following sub-apps: +Expert is designed to keep your application isolated from Expert's code. Because of this, Expert is structured as an umbrella app, with the following sub-apps: - * `common`: Contains all code common to the other applications. - * `proto`: Used by `protocol` to generate the Elixir representation of LSP data structures. - * `protocol`: Code related to speaking the language server protocol. - * `remote_control`: The application that's injected into a project's code, which - gives lexical an API to do things in the context of your app. - * `server` The language server itself. + * `forge`: Contains all code common to the other applications. + * `engine`: The application that's injected into a project's code, which + gives expert an API to do things in the context of your app. + * `expert` The language server itself. -Lexical is an umbrella app so we can control how many dependencies the remote control app has. By separating lexical into sub-applications, each is built as a separate archive, and we can pick and choose which of these applications (and their dependencies) are injected into the project's VM, thus reducing how much contamination the project sees. If lexical was a standard application, adding dependencies to lexical would cause those dependencies to appear in the project's VM, which might cause build issues, version conflicts in mix or other inconsistencies. - -Since the `remote_control` app only depends on `common`, `path_glob` and `elixir_sense`, only those applications pollute the project's vm. Keeping `remote_control`'s dependencies to a minimum is a design goal of this architecture. +By separating expert into sub-applications, each is built as a separate archive, and we can pick and choose which of these applications (and their dependencies) are injected into the project's VM, thus reducing how much contamination the project sees. If Expert was a standard application, adding dependencies to Expert would cause those dependencies to appear in the project's VM, which might cause build issues, version conflicts in mix or other inconsistencies. +Since the `engine` app only depends on `forge`, `path_glob` and `elixir_sense`, only those applications pollute the project's vm. Keeping `engine`'s dependencies to a minimum is a design goal of this architecture. ## Language Server -The language server (the `server` app) is the entry point to Lexical. When started by the `start_lexical.sh` command, it sets up a [transport](https://github.com/lexical-lsp/lexical/blob/main/apps/expert/lib/lexical/server/transport.ex) that [reads JsonRPC from standard input and writes responses to standard output](https://github.com/lexical-lsp/lexical/blob/main/apps/expert/lib/lexical/server/transport/std_io.ex). +The language server (the `expert` app) is the entry point to Expert. When started, it sets up a transport via GenLSP that reads JsonRPC and responds to it. The default transport is Standard IO, but it can be configured to use TCP. -When a message is received, it is parsed into either a [LSP Request](https://github.com/lexical-lsp/lexical/blob/main/apps/protocol/lib/lexical/protocol/requests.ex) or a [LSP Notification](https://github.com/lexical-lsp/lexical/blob/main/apps/protocol/lib/lexical/protocol/notifications.ex) and then it's handed to the [language server](https://github.com/lexical-lsp/lexical/blob/main/apps/expert/lib/lexical/server.ex) to process. +When a message is received, it is parsed into either a LSP Request or a LSP Notification and then it's handed to the [language server](https://github.com/elixir-lang/expert/blob/main/apps/expert/lib/expert.ex) to process. -The only messages the [lexical server process](https://github.com/lexical-lsp/lexical/blob/main/apps/expert/lib/lexical/server.ex) handles directly are those related to the lifecycle of the language server itself: +The only messages the Expert server process handles directly are those related to the lifecycle of the language server itself: - Synchronizing document states. - Processing LSP configuration changes. - Performing initialization and shutdown. -All other messages are delegated to a _Provider Handler_. This delegation is accomplished by the server process adding the request to the [provider queue](https://github.com/lexical-lsp/lexical/blob/main/apps/expert/lib/lexical/server/provider/queue.ex). The provider queue asks the `Expert.Provider.Handlers.for_request/1` function which handler is configured to handle the request, creates a task for the handler and starts it. - -A _Provider Handler_ is just a module that defines a function of arity 2 that takes the request to handle and a `%Expert.Configuration{}`. These functions can reply to the request, ignore it, or do some other action. +All other messages are delegated to a _Provider Handler_. A _Provider Handler_ is a module that defines a function of arity 2 that takes the request to handle and a `%Expert.Configuration{}`. These functions can reply to the request, ignore it, or do some other action. diff --git a/pages/development.md b/pages/development.md new file mode 100644 index 00000000..5635ba22 --- /dev/null +++ b/pages/development.md @@ -0,0 +1,41 @@ +# Development + +## Logging + +When expert starts up, it creates a `.expert` directory in the root +directory of a project. Inside that directory are two log files, +`expert.log` and `project.log`. The `.expert.log` log file contains +logging and OTP messages from the language server, while the +`project.log` file contains logging and OTP messages from the +project's node. While developing expert, it's helpful to open up a +terminal and tail both of these log files so you can see any errors +and messages that expert emits. To do that, run the following in a +terminal while in the project's root directory: + +```sh +tail -f .expert/*.log +``` + +Note: These log files roll over when they reach 1 megabyte, so after a +time, it will be necessary to re-run the above command. + +## Debugging + +Expert supports a debug shell, which will connect a remote shell to a +currently-running language server process. To use it, `cd` into your expert +installation directory and run + +```sh +./apps/expert/bin/debug_server.sh +``` + +For example, if I would like to run the debug server for a server running in +your `my_project` project, run: + +```sh +./apps/expert/bin/debug_server.sh my_project +``` + +...and you will be connected to a remote IEx session _inside_ the language +server for `my_project`. This allows you to investigate processes, make changes +to the running code, or run `:observer`. diff --git a/pages/glossary.md b/pages/glossary.md index 6aef3e5b..f133ade6 100644 --- a/pages/glossary.md +++ b/pages/glossary.md @@ -1,14 +1,14 @@ # Glossary -This project uses a considerable amount of jargon, some adopted from the Language Server Protocol and some specific to Lexical. +This project uses a considerable amount of jargon, some adopted from the Language Server Protocol and some specific to Expert. This glossary attempts to define jargon used in this codebase. Though it is not exhaustive, we hope it helps contributors more easily navigate and understand existing code and the goal, and that it provides some guidance for naming new things. -**You can help!** If you run across a new term while working on Lexical and you think it should be defined here, please [open an issue](https://github.com/lexical-lsp/lexical/issues) suggesting it! +**You can help!** If you run across a new term while working on Expert and you think it should be defined here, please [open an issue](https://github.com/elixir-lang/expert/issues) suggesting it! ## Language Server Protocol (LSP) -This section covers features, names, and abstractions used by Lexical that have a correspondence to the Language Server Protocol. For a definitive reference, see the [LSP Specification](https://microsoft.github.io/language-server-protocol/specifications/specification-current). +This section covers features, names, and abstractions used by Expert that have a correspondence to the Language Server Protocol. For a definitive reference, see the [LSP Specification](https://microsoft.github.io/language-server-protocol/specifications/specification-current). ### Messages, Requests, Responses, and Notifications @@ -27,13 +27,14 @@ From these 3 top-level types, LSP defines more specific more concrete, actionabl ... and many more. These can serve as good reference for the specific features you're working on. -Lexical maps these in the modules [`Lexical.Protocol.Requests`](https://github.com/lexical-lsp/lexical/blob/main/apps/protocol/lib/lexical/protocol/requests.ex), [`Lexical.Protocol.Responses`](https://github.com/lexical-lsp/lexical/blob/main/apps/protocol/lib/lexical/protocol/responses.ex), and[ `Lexical.Protocol.Notifications`](https://github.com/lexical-lsp/lexical/blob/main/apps/protocol/lib/lexical/protocol/notifications.ex). +Expert uses [GenLSP](https://github.com/elixir-tools/gen_lsp) to implement the LSP protocol, which defines all the +necessary messages. Finally, it's worth noting all messages are JSON, specifically [JSON-RPC version 2.0](https://www.jsonrpc.org/specification). ### Document(s) -A single file identified by a URI and contains textual content. Formally referred to as [Text Documents](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocuments) in LSP and modeled as [`Lexical.Document`](https://github.com/lexical-lsp/lexical/blob/main/projects/lexical_shared/lib/lexical/document.ex) structs in Lexical. +A single file identified by a URI and contains textual content. Formally referred to as [Text Documents](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocuments) in LSP and modeled as `Expert.Document` structs in Expert. ### Diagnostics @@ -49,23 +50,29 @@ A code action represents a change that can be performed in code. In VSCode they LSP defines a protocol for language servers to tell clients what actions they're capable of performing, and for clients to request those actions be taken. See for example LSP's [CodeActionClientCapabilities interface](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#codeActionClientCapabilities). -## Concepts exclusive to Lexical +## Concepts exclusive to Expert -This section briefly summarizes abstractions introduced by Lexical. Detailed information can be found in the respective moduledocs. +This section briefly summarizes abstractions introduced by Expert. Detailed information can be found in the respective moduledocs. ### The Project struct -An Elixir struct that represents the current state of an elixir project. See `Lexical.Project`. +An Elixir struct that represents the current state of an elixir project. See `Expert.Project`. + +### The Project node + +When you open an elixir project in Expert, it starts a new Elixir node that runs the `engine` application. This node is called the _Project node_ and it is isolated from the Expert node. The Project node is responsible for compiling the project's code, to gather code intelligence information with ElixirSense, and providing an API for the language server to interact with the project. + +The logs for these nodes are stored in the `.expert/project.log` file in the root of the project. ### The Convertible protocol Some LSP data structures cannot be trivially converted to Elixir terms. -The `Lexical.Convertible` protocol helps centralize the necessary conversion logic where this is the case. +The `Expert.Convertible` protocol helps centralize the necessary conversion logic where this is the case. ### The Translatable protocol and Translation modules -The `Lexical.Completion.Translatable` protocol specifies how Elixir language constructs (such as behaviour callbacks) are converted into LSP constructs (such as [completion items](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionItem)). +The `Expert.Completion.Translatable` protocol specifies how Elixir language constructs (such as behaviour callbacks) are converted into LSP constructs (such as [completion items](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionItem)). See `Expert.CodeIntelligence.Completion.Translations` for various implementations. diff --git a/pages/installation.md b/pages/installation.md index be6a754f..be5c86fe 100644 --- a/pages/installation.md +++ b/pages/installation.md @@ -1,37 +1,27 @@ # Installation -The following instructions document how to install Lexical after +The following instructions document how to install Expert after building from source. Some editors, like Visual Studio Code, have the -ability to automatically install the latest version of Lexical for +ability to automatically install the latest version of Expert for you. -## Caveats +Expert aims to support Elixir versions `1.15.3` with Erlang `25.0` and later. +**You must compile Expert under the lowest version of Elixir and Erlang that you intend to use in your projects.** -Lexical supports the following versions of Elixir and Erlang: - -| Erlang | Version range | Notes | -| ----------- |----------------- | ------ | -| 25 | `>= 25.0` | | -| 26 | `>= 26.0.2` | | -| 27 | `>= 27.0` | `27.0` - `27.0.1` Will use dramatically more memory due to a bug in Erlang's ETS table compression | +Caveats with the following versions of Elixir and Erlang are documented below: | Elixir | Version Range | Notes | | -------- | -------------- | -------- | -| 1.15 | `>= 1.15.8` | | -| 1.16 | `>= 1.16.0` | | +| 1.18 | `>= 1.18.0` | | | 1.17 | `>= 1.17.0` | | +| 1.16 | `>= 1.16.0` | | +| 1.15 | `>= 1.15.3` | `1.15.0` - `1.15.2` have compiler bugs that prevent Expert from working. | -Lexical can run projects in any version of Elixir and Erlang that it -supports, but it's important to understand that Lexical needs to be -compiled under the lowest version of elixir and erlang that you intend -to use it with. That means if you have the following projects: - - * `first`: elixir `1.18.3` erlang `27.3.3` - * `second`: elixir `1.16.1` erlang `25.2.3` - * `third`: elixir: `1.15.8` erlang `26.0` - -Lexical would need to be compiled with Erlang `25.2.3` and Elixir `1.15.8`. -Lexical's prepackaged builds use Erlang `25.0` and Elixir `1.15.8` +| Erlang | Version range | Notes | +| ----------- |----------------- | ------ | +| 27 | `>= 27.0` | Expert will use dramatically more memory due to a bug in Erlang's ETS table compression. | +| 26 | `>= 26.0.2` | | +| 25 | `>= 25.0` | | ## Prerequisites First, Install git LFS by [following these instructions](https://docs.github.com/en/repositories/working-with-files/managing-large-files/installing-git-large-file-storage). @@ -39,33 +29,37 @@ First, Install git LFS by [following these instructions](https://docs.github.com Then, clone the git repository. Do this with ```elixir -git clone git@github.com:lexical-lsp/lexical.git +git clone git@github.com:elixir-lang/expert.git ``` -Then change to the lexical directory +Then change to the expert directory ```shell -cd lexical +cd expert ``` -Then fetch lexical's dependencies +Then fetch expert's dependencies ```shell -mix deps.get +just deps forge +just deps engine +just deps expert ``` ...and build the project ```shell -mix package +just release-local ``` If things complete successfully, you will then have a release in your -`_build/dev/package/lexical` directory. If you see errors, please file a +`apps/expert/burrito_out` directory. If you see errors, please file a bug. -For the following examples, assume the absolute path to your Lexical -source code is `/my/home/projects/lexical`. +For the following examples, assume the absolute path to your Expert +source code is `/my/home/projects/expert` and that you are running an amd64 +Linux system. For other systems, replace the `expert_linux_amd64` with the +appropriate binary name. ## Editor-specific setup 1. [Vanilla Emacs with lsp-mode](#vanilla-emacs-with-lsp-mode) @@ -96,7 +90,7 @@ emacs configuration), insert the following code: (use-package elixir-mode :ensure t :custom - (lsp-elixir-server-command '("/my/home/projects/_build/dev/package/lexical/bin/start_lexical.sh"))) + (lsp-elixir-server-command '("/my/home/projects/expert/apps/expert/burrito_out/expert_linux_amd64"))) ``` @@ -106,11 +100,7 @@ Restart emacs, and Lexical should start when you open a file with a ### Vanilla Emacs with eglot -Eglot in Emacs 30 already has built-in support for Lexical after -commit 9e0524a8820fbb8fdb155b1ca58919dcfcaffd63. - -If you're using Emacs 30 and before that commit, it's recommended to -update Emacs, but you can add lexical support in the following way: +You can add Expert support in the following way: ```emacs-lisp (with-eval-after-load 'eglot @@ -119,9 +109,9 @@ update Emacs, but you can add lexical support in the following way: nil nil #'equal) (if (and (fboundp 'w32-shell-dos-semantics) (w32-shell-dos-semantics)) - '("language_server.bat") + '("expert_windows_amd64") (eglot-alternatives - '("language_server.sh" "start_lexical.sh"))))) + '("expert_linux_amd64" "start_lexical.sh"))))) ``` For versions before 30, you can add Eglot support for Lexical in the @@ -132,9 +122,9 @@ following way: (setf (alist-get 'elixir-mode eglot-server-programs) (if (and (fboundp 'w32-shell-dos-semantics) (w32-shell-dos-semantics)) - '("language_server.bat") + '("expert_windows_amd64") (eglot-alternatives - '("language_server.sh" "start_lexical.sh"))))) + '("expert_linux_amd64" "start_lexical.sh"))))) ``` If you're using `elixir-ts-mode` on Emacs 29, you can add a new entry @@ -146,12 +136,11 @@ for Eglot: `((elixir-ts-mode heex-ts-mode) . ,(if (and (fboundp 'w32-shell-dos-semantics) (w32-shell-dos-semantics)) - '("language_server.bat") + '("expert_windows_amd64") (eglot-alternatives - '("language_server.sh" "start_lexical.sh")))))) + '("expert_linux_amd64" "start_lexical.sh")))))) ``` - ### Visual Studio Code Click on the extensions button on the sidebar, then search for @@ -159,12 +148,12 @@ Click on the extensions button on the sidebar, then search for download the latest version of Lexical. To change to a local executable, go to `Settings -> Extensions -> Lexical` and -type `/my/home/projects/lexical/_build/dev/package/lexical/bin` into the text box in +type `/my/home/projects/expert/apps/expert/burrito_out/expert_linux_amd64` into the text box in the `Server: Release path override` section. ### neovim -Lexical requires neovim `>= 0.9.0`. +Expert requires neovim `>= 0.9.0`. In version `>= 0.9.0`, the key is to append the custom LS configuration to @@ -174,7 +163,7 @@ configuration below as a reference: ```lua require('lspconfig').lexical.setup { - cmd = { "my/home/projects/_build/dev/package/lexical/bin/start_lexical.sh" }, + cmd = { "my/home/projects/expert/apps/expert/burrito_out/expert_linux_amd64" }, root_dir = function(fname) return util.root_pattern("mix.exs", ".git")(fname) or vim.loop.cwd() end, @@ -184,49 +173,6 @@ require('lspconfig').lexical.setup { } ``` -If the configuration above doesn't work for you, please try this minimal [neovim configuration](https://github.com/scottming/nvim-mini-for-lexical), It can eliminate other plugin factors. - -### LunarVim - -[LunarVim](https://www.lunarvim.org) is a neovim configuration package with a lot of goodies built-in, while remaining very configurable. - -First, add this to your configuration: - -```lua --- Add `elixirls` to `skipped_servers` list -vim.list_extend(lvim.lsp.automatic_configuration.skipped_servers, { "elixirls" }) - --- Remove `lexical` from `skipped_servers` list -lvim.lsp.automatic_configuration.skipped_servers = vim.tbl_filter(function(server) - return server ~= "lexical" -end, lvim.lsp.automatic_configuration.skipped_servers) -``` - -This is necessary because LunarVim defaults to `elixirls` so we must ignore it first. Otherwise you'll have both `lexical` and `elixirls` running when you open Elixir files. - -Remove `elixirls` from the `lvim.lsp.installer.setup.ensure_installed = { ... }` list so it does not get automatically reinstalled. - -Optionally run `:LspUninstall elixirls` from within neovim if you don't want to keep `elixirls` around. - -Then use the same configuration as the one in the [neovim](#neovim) section. - -### Vim + ALE - -[ALE](https://github.com/dense-analysis/ale) includes built-in LSP support for Lexical. -To enable it, you'll need to tell ALE where your Lexical release is located (including -the `bin` directory) and add `lexical` to the list of enabled Elixir linters. - -A good way to do this is to add the following to a `~/.vim/after/ftplugin/elixir.vim` -file: - -```viml -let b:ale_linters = ['lexical', 'mix'] -let b:ale_elixir_lexical_release = '/my/home/projects/_build/dev/package/lexical/bin' -``` - -That will automatically enable the `lexical` and `mix` linters for all buffers with -the `elixir` file type. - ### Vim + Vim-LSP An example of configuring Lexical as the Elixir language server for @@ -245,9 +191,9 @@ call minpac#add("prabirshrestha/vim-lsp") # Configure as the elixir language server if executable("elixir") - augroup lsp_lexical + augroup lsp_expert autocmd! - autocmd User lsp_setup call lsp#register_server({ name: "lexical", cmd: (server_info) => "{{path_to_lexical}}/lexical-lsp/lexical/_build/dev/package/lexical/bin/start_lexical.sh", allowlist: ["elixir", "eelixir"] }) + autocmd User lsp_setup call lsp#register_server({ name: "expert", cmd: (server_info) => "{{path_to_expert}}/expert/apps/expert/burrito_out/expert_linux_amd64", allowlist: ["elixir", "eelixir"] }) autocmd FileType elixir setlocal omnifunc=lsp#complete autocmd FileType eelixir setlocal omnifunc=lsp#complete augroup end @@ -259,7 +205,7 @@ If you use [Vim-LSP-Settings](mattn/vim-lsp-settings) for installing and configu you can use the following flag to disable prompts to install elixir-ls: ```viml -g:lsp_settings_filetype_elixir = ["lexical"] +g:lsp_settings_filetype_elixir = ["expert"] ``` @@ -274,16 +220,16 @@ Add the language server to your `~/.config/helix/languages.toml` config. In the case that the file doesn't exist yet, you can create a new file at this location. ```toml -[language-server.lexical] -command = "/my/home/projects/_build/dev/package/lexical/bin/start_lexical.sh" +[language-server.expert] +command = "/my/home/projects/expert/apps/expert/burrito_out/expert_linux_amd64" [[language]] name = "elixir" -language-servers = ["lexical"] +language-servers = ["expert"] [[language]] name = "heex" -language-servers = ["lexical"] +language-servers = ["expert"] ``` ### Sublime Text @@ -295,13 +241,7 @@ Lexical can be used with Sublime Text via the [LSP-Sublime](https://lsp.sublimet There is currently no [language server package](https://lsp.sublimetext.io/language_servers/) specifically for Lexical that works with LSP-Sublime so we'll need to create a [custom client configuration](https://lsp.sublimetext.io/client_configuration/). #### Installation - -First, ensure that you have Lexical [installed from source](https://github.com/lexical-lsp/lexical/blob/main/pages/installation.md#prerequisites) correctly and note the full path of the directory with Lexical's executables: - -Print the full path of the directory holding the Lexical executables: -`cd {directory_you_cloned_lexical_to}/_build/dev/package/lexical/bin/ && pwd` - -Then, install LSP-Sublime with Package Control if you haven't already. +First, install LSP-Sublime with Package Control if you haven't already. Next, open up the LSP settings in Sublime. You can do this by invoking the command palette (`ctrl/cmd + shift + p`) and selecting `Preferences: LSP Settings`. @@ -309,13 +249,13 @@ You'll need to add a key called `"clients"` in the top-level `LSP.sublime-settin ```json "clients": { - "elixir-lexical": { + "elixir-expert": { "enabled": true, - "command": ["{output_from_pwd_cmd_above}/start_lexical.sh", ""], + "command": ["/my/home/projects/expert/apps/expert/burrito_out/expert_linux_amd64", ""], "selector": "source.elixir" } } ``` -_note: you can name elixir-lexical whatever you like, it's just for your own identification_ +_note: you can name elixir-expert whatever you like, it's just for your own identification_ -Upon saving the configuration, LSP-Sublime should enable the new `elixir-lexical` LSP server. Go into an Elixir file and you should now see `elixir-lexical` in the lower left of the status bar. If not, invoke the command palette and select `LSP: Enable Language Server Globally/In Project` and it should run. +Upon saving the configuration, LSP-Sublime should enable the new `elixir-expert` LSP server. Go into an Elixir file and you should now see `elixir-expert` in the lower left of the status bar. If not, invoke the command palette and select `LSP: Enable Language Server Globally/In Project` and it should run. From 815f2afd9a031e6d7f26bf2d0379578fbf4999ed Mon Sep 17 00:00:00 2001 From: doorgan Date: Mon, 18 Aug 2025 18:10:10 -0300 Subject: [PATCH 2/4] chore: cleanup CHANGELOG.md --- CHANGELOG.md | 479 --------------------------------------------------- 1 file changed, 479 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f59bd200..2cc2761e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,481 +1,2 @@ ## Unreleased No changes yet - -## v0.7.2 -We've identified several long-standing performance bottlenecks in Lexical. Among them: - -1. A bottleneck that affects Lexical when it receives a large number of document updates. The bottleneck would cause the server process's Task Queue (the thing that delegates incoming LS requests to the process that handles them) to crash, and the server would become unusable after. Additionally, Lexical would build your code while the document updates were occurring, which would further slow things down. Both issues are now fixed, and Lexical waits until you stop making changes before it tries to compile your project. -2. We calculated the completion context once per completion item returned, which would be slow when a large number of completions were returned (like when you type `Enum.`). Since the context is static to your cursor, we only need to calculate it once. -3. Only call `mix deps.compile` for older versions of elixir that change the directory when compiling. -4. Incorporated Jose's new mix format task that doesn't require us to be inside of the given mix project. This means that formatting no longer uses the build lock. Formatting times have gone down from 400ms in the worst case to 10ms. - -In addition, we've improved diagnostic reporting in config files. - -## What's Changed -* Update the Nix hash on PR, not on the main branch by @akirak in https://github.com/lexical-lsp/lexical/pull/817 -* Convert all exceptions in config files into diagnostics by @zachallaun in https://github.com/lexical-lsp/lexical/pull/824 -* Server bottlenecks by @scohen in https://github.com/lexical-lsp/lexical/pull/825 -* Update the Nix hash by @akirak in https://github.com/lexical-lsp/lexical/pull/818 -* Improve performance under batch operations by @scohen in https://github.com/lexical-lsp/lexical/pull/826 -* simplify default config by @filipmnowak in https://github.com/lexical-lsp/lexical/pull/814 -* add Mix.ensure_application!(:observer) to .iex.exs by @lukad in https://github.com/lexical-lsp/lexical/pull/829 -* updated dialyxir by @scohen in https://github.com/lexical-lsp/lexical/pull/835 -* [chore] Allow compression for erlang >= 27.1 by @scohen in https://github.com/lexical-lsp/lexical/pull/836 -* [feat] Loosen find_references by @scohen in https://github.com/lexical-lsp/lexical/pull/831 -* [feat] Group functions by name + type + arity in document symbols by @scohen in https://github.com/lexical-lsp/lexical/pull/833 -* Show syntax macro completions when `Kernel.` is prefixed to the cursor. by @Moosieus in https://github.com/lexical-lsp/lexical/pull/840 -* Performance oriented fixes. by @scohen in https://github.com/lexical-lsp/lexical/pull/841 - -## v0.7 -We're releasing 0.7 so we can support Elixir 1.17 and Erlang 27. However, those users on Erlang 27 will experience large increases in the amount of memory Lexical takes up [due to this bug](https://github.com/erlang/otp/pull/8683). When that bug is fixed, we'll push out another release that will detect the newer version of Erlang and things should go back to normal. - -Other than supporting the newer versions of Erlang and Elixir, we've added the following features: - -### Features -* Organize aliases code action. When invoked, will alphabetize and flatten all your existing aliases in a module. It will also put all aliases in the same place in a module. -* Remove unused alias code action -* Add alias code action: Type a module, invoke the code action and see a list of modules to alias, select one, and it's added to your module's other aliases. -* Improved script handling: Now lexical won't execute scripts when editing them. Thanks, @zachallaun! -* We now show typespecs for struct field completions. Thanks @kirillrogovoy - -## What's Changed - -* Completion: Use existing specs to infer function signatures and vice-versa by @zachallaun https://github.com/lexical-lsp/lexical/pull/802 -* Don't evaluate top-level code in exs fils by @zachallaun https://github.com/lexical-lsp/lexical/pull/798 -* Completion: Don't insert impl attribute if it's already present by @zachallaun https://github.com/lexical-lsp/lexical/pull/801 -* Completion: Use existing specs to infer function signatures and vice-versa by @zachallaun https://github.com/lexical-lsp/lexical/pull/802 -* Organize Aliases by @scohen https://github.com/lexical-lsp/lexical/pull/725 -* Remove unused aliases by @scohen -* Refactor: Pass env into completion in remote control by @scohen in https://github.com/lexical-lsp/lexical/pull/733 -* Refactor: Increased type detail by @scohen in https://github.com/lexical-lsp/lexical/pull/734 -* Fix: Edge case for module loading by @scohen in https://github.com/lexical-lsp/lexical/pull/738 -* Improved store error handling by @scohen in https://github.com/lexical-lsp/lexical/pull/737 -* Complete callables without parens if present in locals_without_parens by @zachallaun in https://github.com/lexical-lsp/lexical/pull/739 -* Indexed delegated functions by @scohen in https://github.com/lexical-lsp/lexical/pull/729 -* Fix: Crash when typing english by @scohen in https://github.com/lexical-lsp/lexical/pull/742 -* Fix go to definition behavior for same-name, same-arity functions by directing to the first function by @scottming in https://github.com/lexical-lsp/lexical/pull/746 -* Completion: show type spec for struct fields by @kirillrogovoy in https://github.com/lexical-lsp/lexical/pull/751 -* Code Action: Add alias by @scohen in https://github.com/lexical-lsp/lexical/pull/740 -* Fixed: Go to definitions crashes on modules defined via a macro by @scohen in https://github.com/lexical-lsp/lexical/pull/753 -* Increased plugin timeouts by @scohen in https://github.com/lexical-lsp/lexical/pull/757 -* Code Action: Remove unused aliases by @scohen in https://github.com/lexical-lsp/lexical/pull/748 -* Reorder `test` macro completions by @zachallaun in https://github.com/lexical-lsp/lexical/pull/769 -* Added struct definition detection for ecto schemas by @scohen in https://github.com/lexical-lsp/lexical/pull/758 -* Sorted bang functions after non-bang variants by @scohen in https://github.com/lexical-lsp/lexical/pull/770 - -### v0.6.1 - -Small bugfix release. We found an issue regarding unicode conversion, and although it's existed for a while and no one complained, we felt that it was more likely to happen now that we have workspace symbols. - -* Fix conversion of UTF-8 positions to UTF-16 code units by @zachallaun in https://github.com/lexical-lsp/lexical/pull/719 -* Fix Entity.resolve not correctly resolving local function capture calls @scottming in https://github.com/lexical-lsp/lexical/pull/721 - -## v0.6.0 `24 April, 2024` -After multiple people asked, both document and workspace symbols have been implemented. -Both make heavy use of our indexing infrastructure, which provides extremely fast and -accurate results. - -We've also fixed a number of small inconsistencies and crashes in the indexer, making it more robust and accurate. I especially want to call out the fix that @lukad made, that improved indexing performance by 3600x on his large codebase. -When you update to this release, we strongly recommend re-indexing your project's source code by opening the project's `mix.exs` file and -running the `Rebuild 's code search index` code action. - -In addition, we've improved support for completions in phoenix controllers, stopped completions inside strings and have changed how we sort completions. The new sorting scheme is a big improvement for usability, and sorts things by how "close" they are to what you're working on. Give it a shot, we think you'll like it. - -I'd like to thank all our new contributors, and especially our core team of -@scottming, @zachallaun, @moosieus and @blond. You've all gone above and beyond. - -### What's Changed - -* Add Sublime Text instructions to docs by @distefam in https://github.com/lexical-lsp/lexical/pull/633 -* Implement callback completions by @Moosieus in https://github.com/lexical-lsp/lexical/pull/640 -* Fix `do` completing to `defmodule` in VSCode by @Moosieus in https://github.com/lexical-lsp/lexical/pull/642 -* Speed up indexing by not calling `deps_dir` for every file by @lukad in https://github.com/lexical-lsp/lexical/pull/646 -* Fixed bug where blocks weren't popped correctly by @scohen in https://github.com/lexical-lsp/lexical/pull/647 -* Fix crashing in unsaved vscode files by @Moosieus in https://github.com/lexical-lsp/lexical/pull/644 -* Find references for variables by @scohen in https://github.com/lexical-lsp/lexical/pull/645 -* New completion sorting approach by @Moosieus in https://github.com/lexical-lsp/lexical/pull/653 -* Fixed issue where function definitions were returning references by @scohen in https://github.com/lexical-lsp/lexical/pull/655 -* Document Symbols support by @scohen in https://github.com/lexical-lsp/lexical/pull/652 -* Prevent spurious errors in .heex files by disabling the on-type compiler. by @Moosieus in https://github.com/lexical-lsp/lexical/pull/662 -* Fixing crash when dealing with unicode files by @scohen in https://github.com/lexical-lsp/lexical/pull/672 -* Fix: Non-string test names crash exunit indexer by @scohen in https://github.com/lexical-lsp/lexical/pull/676 -* Added module attribute detection by @scohen in https://github.com/lexical-lsp/lexical/pull/679 -* Impl suggest behaviours by @scohen in https://github.com/lexical-lsp/lexical/pull/681 -* Support resolving Phoenix Controller modules. by @scottming in https://github.com/lexical-lsp/lexical/pull/659 -* Completions: Handled nil origin and full name by @scohen in https://github.com/lexical-lsp/lexical/pull/689 -* Fixed crash for in-progress module attributes by @scohen in https://github.com/lexical-lsp/lexical/pull/691 -* For module definitions, use the `Indexer` version instead of `ElixirSense` by @scottming in https://github.com/lexical-lsp/lexical/pull/658 -* Current modules can be nil by @scohen in https://github.com/lexical-lsp/lexical/pull/696 -* Stopped completions inside strings by @scohen in https://github.com/lexical-lsp/lexical/pull/692 -* Workspace symbols support by @scohen in https://github.com/lexical-lsp/lexical/pull/674 -* Fix: Module suggestion was incorrect for files with multiple periods by @scohen in https://github.com/lexical-lsp/lexical/pull/705 - -**Full Changelog**: https://github.com/lexical-lsp/lexical/compare/v0.5.2...v0.6.0 - -## v0.5.2 `29 February, 2024` -This is a bugfix release that fixes the following: - -* Updated credo by @scohen in #617 -* Update nix hash with new deps by @hauleth in #618 -* Prepare scripts for updating Nix hash by non-Nix users by @hauleth in #619 -* Update the installation documentation for the supported Elixir version by @scottming in #624 -* Fixed unused variable code action by @scohen in #628 - -## v0.5.1 `22 February, 2024` -This is a bugfix release that fixes an issue where lexical wouldn't start on MacOS if you're using the default bash, and not using one of the supported version managers (asdf, rtx or mise) - -## v0.5.0 `21 February, 2024` -Admittedly, it's been a long while since the last release, but we've laid the groundwork for some exciting new features. - -Since November, we've built out our search and indexing infrastructure that allows lexical to find interesting bits of your source code and highlight them for you later. We went through five separate backends before settling on one that is super duper fast, memory efficient(ish) and is written in pure elixir. - -Presently, we're using this to power our newest features, find references and go to definition. We've implemented both for modules, module attributes and functions. You'll notice that when lexical starts, it will index your project's source code. This is a one-time operation that should be quick, indexing lexical's and its dependencies 193,000 lines of source code takes around 10 seconds. This means that indexing is on by default, and there's no way to turn it off any more. We've crossed the rubicon, folks, and there's no turning back. - -Other good news, because of the indexing infrastructure, we no longer have to do a full build when lexical starts for the first time. This means the startup time has dramatically improved. On the lexical project, it has dropped from 12 seconds to 2. - -I'd like to thank @scottming @zachallaun and @Blond11516 for ensuring that the current state of the code is where it is today. Also, thank you @hauleth for taking care of the nix flake. - -And we've made a ton of bug fixes and usability improvements since 0.4.1 as well. Some highlights include: - -* Support for elixir version 1.16 -* Handled renaming of rtx to mise -* Multiple improvements to the hover popup -* Improved ease of writing new code actions -* Undefined variables diagnostics error for HEEx templates -* Code action: Suggested function names -* Completions for typespecs -* Improved nix flake - -### What's Changed - -* Correctly activate rtx during boot by @zachallaun in https://github.com/lexical-lsp/lexical/pull/430 -* Improve incompatible version errors on boot by @zachallaun in https://github.com/lexical-lsp/lexical/pull/389 -* i96: send and log messages by @jollyjerr in https://github.com/lexical-lsp/lexical/pull/420 -* Put module below call signature for hover funs/types by @zachallaun in https://github.com/lexical-lsp/lexical/pull/434 -* Fix diagnostics issue when `config_env` is called. by @scottming in https://github.com/lexical-lsp/lexical/pull/439 -* Find References by @scohen in https://github.com/lexical-lsp/lexical/pull/405 -* Code Actions refactor by @scohen in https://github.com/lexical-lsp/lexical/pull/453 -* Consider arity in function ordering by @yerguden in https://github.com/lexical-lsp/lexical/pull/442 -* Fix: Erlang function calls in pipes were incorrectly formatted by @scohen in https://github.com/lexical-lsp/lexical/pull/476 -* Fix: Stutter when completing inside string interpolations by @scohen in https://github.com/lexical-lsp/lexical/pull/464 -* Fix: Don't raise an exception if the build directory doesn't exist by @scohen in https://github.com/lexical-lsp/lexical/pull/481 -* Add Vim ALE configuration details by @jparise in https://github.com/lexical-lsp/lexical/pull/484 -* Removed unhelpful completion for :: symbol by @mdshamoon in https://github.com/lexical-lsp/lexical/pull/485 -* Add heex to filetype list for neovim by @soundmonster in https://github.com/lexical-lsp/lexical/pull/487 -* Added completions for typespecs by @scohen in https://github.com/lexical-lsp/lexical/pull/478 -* Fix module completion error after a dot by @zachallaun in https://github.com/lexical-lsp/lexical/pull/496 -* Add replacing unknown remote function to code actions by @sheldak in https://github.com/lexical-lsp/lexical/pull/443 -* Move from flake-utils to flake-parts by @hauleth in https://github.com/lexical-lsp/lexical/pull/498 -* Fix Diagnostic.Result to_lsp with 4-elem tuple position by @bangalcat in https://github.com/lexical-lsp/lexical/pull/502 -* Optimise the manual loading of dependent apps and modules. by @scottming in https://github.com/lexical-lsp/lexical/pull/455 -* Add instructions for LunarVim installation by @dimitarvp in https://github.com/lexical-lsp/lexical/pull/510 -* Find function references by @scohen in https://github.com/lexical-lsp/lexical/pull/516 -* Added percentage based progress reporters by @scohen in https://github.com/lexical-lsp/lexical/pull/519 -* Added reindex command by @scohen in https://github.com/lexical-lsp/lexical/pull/522 -* Support mise (new name for rtx) by @x-ji in https://github.com/lexical-lsp/lexical/pull/544 -* Correctly applied code lens options by @scohen in https://github.com/lexical-lsp/lexical/pull/553 -* Support Elixir 1.16 by @scottming in https://github.com/lexical-lsp/lexical/pull/535 -* chore(nix): update deps hash by @hauleth in https://github.com/lexical-lsp/lexical/pull/557 -* Resolve function definitions without parens by @zachallaun in https://github.com/lexical-lsp/lexical/pull/563 -* Correctly resolve imported calls by @zachallaun in https://github.com/lexical-lsp/lexical/pull/565 -* Implemented find references for module attributes by @scohen in https://github.com/lexical-lsp/lexical/pull/558 -* Correctly resolve `&Module.function/arity` syntax by @zachallaun in https://github.com/lexical-lsp/lexical/pull/566 -* Switched over to mise rather than rtx by @scohen in https://github.com/lexical-lsp/lexical/pull/580 -* Struct discovery now uses the index by @scohen in https://github.com/lexical-lsp/lexical/pull/582 -* Detected module references using __MODULE__ by @scohen in https://github.com/lexical-lsp/lexical/pull/603 -* Bumped garbage collection for some of our more intensive processes by @scohen in https://github.com/lexical-lsp/lexical/pull/600 -* Calling find references on a `defstruct` call finds defined structs by @scohen in https://github.com/lexical-lsp/lexical/pull/607 -* Zipped package now keeps file permissions by @scohen in https://github.com/lexical-lsp/lexical/pull/609 -* Excluded source files in build directory by @scohen in https://github.com/lexical-lsp/lexical/pull/610 - -## v0.4.1 `08 November, 2023` -This is a small bugfix release for 0.4.0 - -It contains the following fixes: - - * Fix: Stutter when completing some items inside strings (`:erl` would complete to `:erlerlang`) - * Fix: Undefined variable names in HEEX templates - * Fix: Erlang remote calls in pipelines did not have their first parameter removed during completion - * Feature: Function names in completions are ordered by name and then arity - -## v0.4.0 `24 October, 2023` -Welcome to Lexical v0.4.0 - -The main thrust of v0.4 is hover support and quality of life improvements. Now, when you hover over a module or function, you'll see relevant documentation, types and parameters. We've also spent a lot of time working on completions in #410, which makes them more consistent, fixes some bugs in certain language clients (like eglot adding an extra @ when completing module attributes), and greatly improves their feel in vscode. - -Additionally, quite a few of the changes in this PR were about laying the groundwork for our indexing infrastructure, which will debut in the next version. But fear not, this version has indexing disabled. - -I want to thank @zachallaun and @scottming for all their hard work on this release. They've made lexical faster, more friendly and have removed a bunch of bugs! - -Highlights include: - - * Document hover for functions and modules - * Improved boot scripts - * Automatically updating nix flake. Thanks, @hauleth - * Helix editor integration. Thanks @philipgiuliani - * .heex integration - * Massively improved completions (Check out the PR, it's too big to summarize) - -Bugs fixed: - - * Longstanding unicode completion / editing bugs slain. Unicode works perfectly now. - -### What's Changed - -* Suggest a module name for defmodule completion by @scohen in https://github.com/lexical-lsp/lexical/pull/338 -* Add Vanilla Emacs with eglot instruction by @dalugm in https://github.com/lexical-lsp/lexical/pull/343 -* Add elixir boot script to support having spaces in the package path by @Blond11516 in https://github.com/lexical-lsp/lexical/pull/345 -* Centralize general-use AST modules in `common` by @zachallaun in https://github.com/lexical-lsp/lexical/pull/342 -* Allow release workflow to update existing releases by @Blond11516 in https://github.com/lexical-lsp/lexical/pull/346 -* Fixed bug in path namespacing by @scohen in https://github.com/lexical-lsp/lexical/pull/350 -* Convert utf8->latin1 before decoding JSON-RPC payloads by @zachallaun in https://github.com/lexical-lsp/lexical/pull/353 -* Add support for `textDocument/hover` (for modules) by @zachallaun in https://github.com/lexical-lsp/lexical/pull/331 -* Fix markdown formatting for supported versions by @reisub in https://github.com/lexical-lsp/lexical/pull/355 -* Indexing features for modules by @scohen in https://github.com/lexical-lsp/lexical/pull/347 -* Refactor: Moved Dispatch from server to remote_control by @scohen in https://github.com/lexical-lsp/lexical/pull/357 -* Moved dispatch to :gen_event by @scohen in https://github.com/lexical-lsp/lexical/pull/358 -* Integrated indexing into language server by @scohen in https://github.com/lexical-lsp/lexical/pull/359 -* Fixed index store test failure by @scohen in https://github.com/lexical-lsp/lexical/pull/365 -* Add `current_project/1` helper function by @scottming in https://github.com/lexical-lsp/lexical/pull/360 -* Position refactor by @scohen in https://github.com/lexical-lsp/lexical/pull/364 -* Added logos to project and readme by @scohen in https://github.com/lexical-lsp/lexical/pull/366 -* Aliases was confused by nested non-module blocks by @scohen in https://github.com/lexical-lsp/lexical/pull/368 -* Better typespecs by @scohen in https://github.com/lexical-lsp/lexical/pull/367 -* Add Helix installation instructions by @philipgiuliani in https://github.com/lexical-lsp/lexical/pull/376 -* Generate correct typespec for LSP messages by @zachallaun in https://github.com/lexical-lsp/lexical/pull/380 -* Async indexing by @zachallaun in https://github.com/lexical-lsp/lexical/pull/371 -* Enabled warnings-as-errors on umbrella by @scohen in https://github.com/lexical-lsp/lexical/pull/383 -* Improved hover support: Structs, qualified calls and types, more info for modules by @zachallaun in https://github.com/lexical-lsp/lexical/pull/356 -* Explicitly implement protocol in completion modules by @zachallaun in https://github.com/lexical-lsp/lexical/pull/386 -* Refactor client capability tracking by @zachallaun in https://github.com/lexical-lsp/lexical/pull/385 -* Support for HEEx compilation by @scottming in https://github.com/lexical-lsp/lexical/pull/323 -* Made aliases better handle the __aliases__ special form by @scohen in https://github.com/lexical-lsp/lexical/pull/393 -* Fix the `eex` compiled flaky test by @scottming in https://github.com/lexical-lsp/lexical/pull/394 -* Enhanced ets / removed cub and mnesia backends. by @scohen in https://github.com/lexical-lsp/lexical/pull/392 -* Disabled indexing by @scohen in https://github.com/lexical-lsp/lexical/pull/399 -* Fix Field parsing error for zed editor by @scottming in https://github.com/lexical-lsp/lexical/pull/396 -* Fix the struct `KeyError` diagnostics by @scottming in https://github.com/lexical-lsp/lexical/pull/397 -* Always return `Completion.List` with `is_incomplete: true` by @zachallaun in https://github.com/lexical-lsp/lexical/pull/398 -* Detect version manager the same way in all scripts by @zachallaun in https://github.com/lexical-lsp/lexical/pull/390 -* Respond with `nil` instead of an error when formatting fails by @zachallaun in https://github.com/lexical-lsp/lexical/pull/411 -* Fixup README word repeating by @solar05 in https://github.com/lexical-lsp/lexical/pull/414 -* Made display name calculation relocatable by @scohen in https://github.com/lexical-lsp/lexical/pull/415 -* Move `entity` module to `remote_control` app by @scottming in https://github.com/lexical-lsp/lexical/pull/406 -* Reorder the startup order of the children of `Server.Project.Supervisor` by @scottming in https://github.com/lexical-lsp/lexical/pull/407 -* Refactor completions to always use text edits by @zachallaun in https://github.com/lexical-lsp/lexical/pull/409 -* Fix spec for `Lexical.Ast.cursor_path/2` by @zachallaun in https://github.com/lexical-lsp/lexical/pull/418 -* Fix `path_at/2` to allow path to branches if they're innermost by @zachallaun in https://github.com/lexical-lsp/lexical/pull/419 -* Improve completions by @zachallaun in https://github.com/lexical-lsp/lexical/pull/410 -* Improved memory performance while indexing by @scohen in https://github.com/lexical-lsp/lexical/pull/421 -* chore: update Nix definition by @hauleth in https://github.com/lexical-lsp/lexical/pull/417 -* Make the operational behavior of the ancestors of structures and modules more consistent by @scottming in https://github.com/lexical-lsp/lexical/pull/408 -* Refactor shell scripts and add Docker-based integration tests by @zachallaun in https://github.com/lexical-lsp/lexical/pull/395 - -**Full Changelog**: https://github.com/lexical-lsp/lexical/compare/v0.3.0...v0.4.0 - -### What's Changed - -* Suggest a module name for defmodule completion by @scohen in https://github.com/lexical-lsp/lexical/pull/338 -* Add Vanilla Emacs with eglot instruction by @dalugm in https://github.com/lexical-lsp/lexical/pull/343 -* Add elixir boot script to support having spaces in the package path by @Blond11516 in https://github.com/lexical-lsp/lexical/pull/345 -* Centralize general-use AST modules in `common` by @zachallaun in https://github.com/lexical-lsp/lexical/pull/342 -* Allow release workflow to update existing releases by @Blond11516 in https://github.com/lexical-lsp/lexical/pull/346 -* Fixed bug in path namespacing by @scohen in https://github.com/lexical-lsp/lexical/pull/350 -* Convert utf8->latin1 before decoding JSON-RPC payloads by @zachallaun in https://github.com/lexical-lsp/lexical/pull/353 -* Add support for `textDocument/hover` (for modules) by @zachallaun in https://github.com/lexical-lsp/lexical/pull/331 -* Fix markdown formatting for supported versions by @reisub in https://github.com/lexical-lsp/lexical/pull/355 -* Indexing features for modules by @scohen in https://github.com/lexical-lsp/lexical/pull/347 -* Refactor: Moved Dispatch from server to remote_control by @scohen in https://github.com/lexical-lsp/lexical/pull/357 -* Moved dispatch to :gen_event by @scohen in https://github.com/lexical-lsp/lexical/pull/358 -* Integrated indexing into language server by @scohen in https://github.com/lexical-lsp/lexical/pull/359 -* Fixed index store test failure by @scohen in https://github.com/lexical-lsp/lexical/pull/365 -* Add `current_project/1` helper function by @scottming in https://github.com/lexical-lsp/lexical/pull/360 -* Position refactor by @scohen in https://github.com/lexical-lsp/lexical/pull/364 -* Added logos to project and readme by @scohen in https://github.com/lexical-lsp/lexical/pull/366 -* Aliases was confused by nested non-module blocks by @scohen in https://github.com/lexical-lsp/lexical/pull/368 -* Better typespecs by @scohen in https://github.com/lexical-lsp/lexical/pull/367 -* Add Helix installation instructions by @philipgiuliani in https://github.com/lexical-lsp/lexical/pull/376 -* Generate correct typespec for LSP messages by @zachallaun in https://github.com/lexical-lsp/lexical/pull/380 -* Async indexing by @zachallaun in https://github.com/lexical-lsp/lexical/pull/371 -* Enabled warnings-as-errors on umbrella by @scohen in https://github.com/lexical-lsp/lexical/pull/383 -* Improved hover support: Structs, qualified calls and types, more info for modules by @zachallaun in https://github.com/lexical-lsp/lexical/pull/356 -* Explicitly implement protocol in completion modules by @zachallaun in https://github.com/lexical-lsp/lexical/pull/386 -* Refactor client capability tracking by @zachallaun in https://github.com/lexical-lsp/lexical/pull/385 -* Support for HEEx compilation by @scottming in https://github.com/lexical-lsp/lexical/pull/323 -* Made aliases better handle the __aliases__ special form by @scohen in https://github.com/lexical-lsp/lexical/pull/393 -* Fix the `eex` compiled flaky test by @scottming in https://github.com/lexical-lsp/lexical/pull/394 -* Enhanced ets / removed cub and mnesia backends. by @scohen in https://github.com/lexical-lsp/lexical/pull/392 -* Disabled indexing by @scohen in https://github.com/lexical-lsp/lexical/pull/399 -* Fix Field parsing error for zed editor by @scottming in https://github.com/lexical-lsp/lexical/pull/396 -* Fix the struct `KeyError` diagnostics by @scottming in https://github.com/lexical-lsp/lexical/pull/397 -* Always return `Completion.List` with `is_incomplete: true` by @zachallaun in https://github.com/lexical-lsp/lexical/pull/398 -* Detect version manager the same way in all scripts by @zachallaun in https://github.com/lexical-lsp/lexical/pull/390 -* Respond with `nil` instead of an error when formatting fails by @zachallaun in https://github.com/lexical-lsp/lexical/pull/411 -* Fixup README word repeating by @solar05 in https://github.com/lexical-lsp/lexical/pull/414 -* Made display name calculation relocatable by @scohen in https://github.com/lexical-lsp/lexical/pull/415 -* Move `entity` module to `remote_control` app by @scottming in https://github.com/lexical-lsp/lexical/pull/406 -* Reorder the startup order of the children of `Server.Project.Supervisor` by @scottming in https://github.com/lexical-lsp/lexical/pull/407 -* Refactor completions to always use text edits by @zachallaun in https://github.com/lexical-lsp/lexical/pull/409 -* Fix spec for `Lexical.Ast.cursor_path/2` by @zachallaun in https://github.com/lexical-lsp/lexical/pull/418 -* Fix `path_at/2` to allow path to branches if they're innermost by @zachallaun in https://github.com/lexical-lsp/lexical/pull/419 -* Improve completions by @zachallaun in https://github.com/lexical-lsp/lexical/pull/410 -* Improved memory performance while indexing by @scohen in https://github.com/lexical-lsp/lexical/pull/421 -* chore: update Nix definition by @hauleth in https://github.com/lexical-lsp/lexical/pull/417 -* Make the operational behavior of the ancestors of structures and modules more consistent by @scottming in https://github.com/lexical-lsp/lexical/pull/408 -* Refactor shell scripts and add Docker-based integration tests by @zachallaun in https://github.com/lexical-lsp/lexical/pull/395 - - -**Full Changelog**: https://github.com/lexical-lsp/lexical/compare/v0.3.3...v0.4.0 - -## v0.3.3 `05 September, 2023` -Fixed Unicode handling. - -Unicode was likely broken under the last several releases; Unicode in documents would result in incorrect errors popping up. This has been fixed, and was due to incorrect decoding in the standard input handler. - -**Full Changelog**: https://github.com/lexical-lsp/lexical/compare/v0.3.2...v0.3.3 - -## v0.3.2 `29 August, 2023` -0.3.2 fixes a bug where packaging would not produce namespaced artifacts if the lexical directory was inside a subdirectory that had one of its dependencies as a path element. - -For example, packaging would fail if lexical was in `/path/to/home/language_servers/lexical`. - -**Full Changelog**: https://github.com/lexical-lsp/lexical/compare/v0.3.1...v0.3.2 - -## v0.3.1 `24 August, 2023` - -This is a bugfix release. Packaging generated in v0.3.0 would not start in directories that contain spaces, and this is the default for vscode under macOS. -This release has a new launching mechanism that should allow us to use a lot less bash scripting. - -## v0.3.0 `23 August, 2023` - -### What's Changed - -* Support Struct fields completion when in struct arguments context by @scottming in https://github.com/lexical-lsp/lexical/pull/196 -* Fix: Argument names crashes in light of a literal atom by @scohen in https://github.com/lexical-lsp/lexical/pull/285 -* Add Nix Flake by @hauleth in https://github.com/lexical-lsp/lexical/pull/175 -* ci: Require strict versions from erlef/setup-beam by @Blond11516 in https://github.com/lexical-lsp/lexical/pull/289 -* Refactor: Extracted Build.Project by @scohen in https://github.com/lexical-lsp/lexical/pull/292 -* Fixed code unit / codepoint confusion by @scohen in https://github.com/lexical-lsp/lexical/pull/290 -* Fixed project node naming conflicts by @scohen in https://github.com/lexical-lsp/lexical/pull/294 -* Remove logger for debugging port stdin/sdtout by @scottming in https://github.com/lexical-lsp/lexical/pull/298 -* Added support for per-file .eex compilation by @scohen in https://github.com/lexical-lsp/lexical/pull/296 -* Added default case by @scohen in https://github.com/lexical-lsp/lexical/pull/305 -* Config compiler by @scohen in https://github.com/lexical-lsp/lexical/pull/304 -* Namespacing refinements by @scohen in https://github.com/lexical-lsp/lexical/pull/307 -* Update architecture.md with spelling corrections by @axelclark in https://github.com/lexical-lsp/lexical/pull/310 -* Improve the documentation related to `neovim` installation. by @scottming in https://github.com/lexical-lsp/lexical/pull/308 -* Handle presense of multiple version managers by @awerment in https://github.com/lexical-lsp/lexical/pull/311 -* make sure not to choke on non-export prefixed path lines by @andyleclair in https://github.com/lexical-lsp/lexical/pull/312 -* Second attempt to make struct completion more consistent by @scottming in https://github.com/lexical-lsp/lexical/pull/225 -* Added installation instructions for Vim + Vim-LSP by @jHwls in https://github.com/lexical-lsp/lexical/pull/315 -* Reworked lexical packaging by @scohen in https://github.com/lexical-lsp/lexical/pull/314 -* Development docs by @scohen in https://github.com/lexical-lsp/lexical/pull/316 -* Fix extraneous logging in test by @scohen in https://github.com/lexical-lsp/lexical/pull/317 -* Update paths to start_lexical.sh in installation.md by @edwardsmit in https://github.com/lexical-lsp/lexical/pull/318 -* Fix: Flaky tests by @scohen in https://github.com/lexical-lsp/lexical/pull/320 -* Support for erlang 26 by @scohen in https://github.com/lexical-lsp/lexical/pull/319 -* Fix typo of package task by @scottming in https://github.com/lexical-lsp/lexical/pull/321 -* Fix VSCode installation instructions by @miXwui in https://github.com/lexical-lsp/lexical/pull/325 -* Fix package task generating empty ZIPs by @Blond11516 in https://github.com/lexical-lsp/lexical/pull/334 -* Removed plugin_runner app by @scohen in https://github.com/lexical-lsp/lexical/pull/327 -* Added development docs suggestions by @scohen in https://github.com/lexical-lsp/lexical/pull/333 -* Added discord link and build badges by @scohen in https://github.com/lexical-lsp/lexical/pull/335 -* 0.3.0 Release by @scohen in https://github.com/lexical-lsp/lexical/pull/337 -* Context-aware "use" completions by @scohen in https://github.com/lexical-lsp/lexical/pull/336 - -**Full Changelog**: https://github.com/lexical-lsp/lexical/compare/v0.2.2...v0.3.0 - -## v0.2.2 `21 July, 2023` - -### What's Changed - -* fix: Add missing command to get rtx env by @Blond11516 in https://github.com/lexical-lsp/lexical/pull/281 -* Update Lexical version to 0.2.2 by @Blond11516 in https://github.com/lexical-lsp/lexical/pull/282 - - -**Full Changelog**: https://github.com/lexical-lsp/lexical/compare/v0.2.1...v0.2.2 - -## v0.2.1 `21 July, 2023` -This release bumps versions of our apps, and contains no improvements or fixes. - -## v0.2.0 `21 July, 2023` - -### What's Changed - -* Handled Cancel Notifications by @scohen in https://github.com/lexical-lsp/lexical/pull/157 -* Support work done progress during project compilation by @scottming in https://github.com/lexical-lsp/lexical/pull/135 -* Normalize naming by @scohen in https://github.com/lexical-lsp/lexical/pull/158 -* Addressed deadlocks in Document Store by @scohen in https://github.com/lexical-lsp/lexical/pull/160 -* Fix diagnostic for missing fields due to @enforce_keys by @scottming in https://github.com/lexical-lsp/lexical/pull/162 -* Enable --warnings-as-errors in CI by @scottming in https://github.com/lexical-lsp/lexical/pull/154 -* Added file watching by @scohen in https://github.com/lexical-lsp/lexical/pull/164 -* Fix CreateWorkDoneProgress for VScode and Emacs by @scottming in https://github.com/lexical-lsp/lexical/pull/161 -* Fixed infinite loop in document updates by @scohen in https://github.com/lexical-lsp/lexical/pull/166 -* Alias only returns modules by @scohen in https://github.com/lexical-lsp/lexical/pull/168 -* Added fragment capabilities to document by @scohen in https://github.com/lexical-lsp/lexical/pull/170 -* Fix record missing key's error by @scottming in https://github.com/lexical-lsp/lexical/pull/174 -* Do not create intermediate binaries by @hauleth in https://github.com/lexical-lsp/lexical/pull/176 -* Improved README.md by @scohen in https://github.com/lexical-lsp/lexical/pull/177 -* Removed string-based completion env operations by @scohen in https://github.com/lexical-lsp/lexical/pull/172 -* Fixed code actions / improved code mod api by @scohen in https://github.com/lexical-lsp/lexical/pull/179 -* Remove patch from progress/state_test by @scottming in https://github.com/lexical-lsp/lexical/pull/180 -* Improved struct completion by @scohen in https://github.com/lexical-lsp/lexical/pull/181 -* fix(asdf): change order of installation by @03juan in https://github.com/lexical-lsp/lexical/pull/186 -* Improve completions with default arguments by @scohen in https://github.com/lexical-lsp/lexical/pull/187 -* New project structure / beginning of plugins by @scohen in https://github.com/lexical-lsp/lexical/pull/184 -* Pulled out the name of arguments in pattern match args by @scohen in https://github.com/lexical-lsp/lexical/pull/193 -* Removed initial compile by @scohen in https://github.com/lexical-lsp/lexical/pull/194 -* Fix the parameter issue of Remote Callable in pipeline. by @scottming in https://github.com/lexical-lsp/lexical/pull/188 -* Removed wx and et applications by @scohen in https://github.com/lexical-lsp/lexical/pull/201 -* Improve UX when completing struct by @scottming in https://github.com/lexical-lsp/lexical/pull/190 -* Added a check for credo pipeline initial argument by @scohen in https://github.com/lexical-lsp/lexical/pull/200 -* We now use Lexical.Plugin.Diagnostics by @scohen in https://github.com/lexical-lsp/lexical/pull/197 -* Fix the NAMESPACE=1 release issue by @scottming in https://github.com/lexical-lsp/lexical/pull/203 -* Boost callable completions that are not double underscore/default by @viniciusmuller in https://github.com/lexical-lsp/lexical/pull/195 -* Reduces behaviour_info/1 priority in completions by @viniciusmuller in https://github.com/lexical-lsp/lexical/pull/205 -* Suggest behavior callbacks by @doughsay in https://github.com/lexical-lsp/lexical/pull/206 -* fix: completion context can be null by @hauleth in https://github.com/lexical-lsp/lexical/pull/210 -* Module sorting / Refactor boost by @scohen in https://github.com/lexical-lsp/lexical/pull/212 -* Dependency structs were not being detected by @scohen in https://github.com/lexical-lsp/lexical/pull/213 -* Load project config before compiling by @scohen in https://github.com/lexical-lsp/lexical/pull/215 -* Plugin Architecture by @scohen in https://github.com/lexical-lsp/lexical/pull/211 -* Refactor: Completion.Results are now Completion.Candidates by @scohen in https://github.com/lexical-lsp/lexical/pull/216 -* ci: Tag release workflow by @Blond11516 in https://github.com/lexical-lsp/lexical/pull/221 -* Added versions to plugins by @scohen in https://github.com/lexical-lsp/lexical/pull/219 -* Bring the 1.15 version `Code` and `:elixir_tokenizer` into lexical by @scottming in https://github.com/lexical-lsp/lexical/pull/217 -* Support map fields completion by @scottming in https://github.com/lexical-lsp/lexical/pull/226 -* Plugin packaging by @scohen in https://github.com/lexical-lsp/lexical/pull/222 -* Support projects having the same directory name as a dependency by @scohen in https://github.com/lexical-lsp/lexical/pull/227 -* Docs: Installation by @scohen in https://github.com/lexical-lsp/lexical/pull/229 -* Fixed plugins for external projects by @scohen in https://github.com/lexical-lsp/lexical/pull/230 -* Add neovim minimal configuaration by @scottming in https://github.com/lexical-lsp/lexical/pull/240 -* Fixed failing builds by @scohen in https://github.com/lexical-lsp/lexical/pull/241 -* Fix the issue of project name being too long by @scottming in https://github.com/lexical-lsp/lexical/pull/239 -* Updated to work with older versions of elixir / erlang by @scohen in https://github.com/lexical-lsp/lexical/pull/235 -* [issue-178] Snippet translations for macro by @Sleepful in https://github.com/lexical-lsp/lexical/pull/208 -* [issue-178] Fix macro_test by @Sleepful in https://github.com/lexical-lsp/lexical/pull/246 -* Compile warnings by @scohen in https://github.com/lexical-lsp/lexical/pull/250 -* WIP: Alias module by @scohen in https://github.com/lexical-lsp/lexical/pull/236 -* Fixed boundary issue by @scohen in https://github.com/lexical-lsp/lexical/pull/249 -* GitHub Actions improvements by @scohen in https://github.com/lexical-lsp/lexical/pull/245 -* Fixing flaky tests by @scohen in https://github.com/lexical-lsp/lexical/pull/252 -* Aliases can fail by @scohen in https://github.com/lexical-lsp/lexical/pull/251 -* Generate `.gitignore` for `.lexical` project workspace by @zachallaun in https://github.com/lexical-lsp/lexical/pull/218 -* Rebuild PLT files on projects dep changes by @scohen in https://github.com/lexical-lsp/lexical/pull/253 -* Changed docs to indicate support for 1.13 and erl 24 by @scohen in https://github.com/lexical-lsp/lexical/pull/257 -* Enforced project name validity by @scohen in https://github.com/lexical-lsp/lexical/pull/258 -* Removed double compilation by @scohen in https://github.com/lexical-lsp/lexical/pull/259 -* Completion improvements by @scohen in https://github.com/lexical-lsp/lexical/pull/260 -* The start line can be the end line by @scohen in https://github.com/lexical-lsp/lexical/pull/264 -* Fixed protocol consolidation by @scohen in https://github.com/lexical-lsp/lexical/pull/265 -* Heavy refactor of namespacing by @scohen in https://github.com/lexical-lsp/lexical/pull/266 -* Namespacing fixes / simplifications by @scohen in https://github.com/lexical-lsp/lexical/pull/268 -* Quieted compile warnings in test by @scohen in https://github.com/lexical-lsp/lexical/pull/270 -* Support Elixir 1.15 by @scottming in https://github.com/lexical-lsp/lexical/pull/261 -* Re-enabled multiple version support by @scohen in https://github.com/lexical-lsp/lexical/pull/269 -* Loadconfig needs to be called before deps are compiled by @scohen in https://github.com/lexical-lsp/lexical/pull/275 -* Added default candidate case by @scohen in https://github.com/lexical-lsp/lexical/pull/274 -* Replace with underscore can fail by @scohen in https://github.com/lexical-lsp/lexical/pull/276 -* Preparing for 0.2.0 release by @scohen in https://github.com/lexical-lsp/lexical/pull/278 - -**Full Changelog**: https://github.com/lexical-lsp/lexical/compare/4367692...v0.2.0 From 820128ca17f4d0b18a4b1826b5f68f8649cbbaa0 Mon Sep 17 00:00:00 2001 From: doorgan Date: Thu, 21 Aug 2025 13:38:46 -0300 Subject: [PATCH 3/4] chore: add section for the development server --- pages/development.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pages/development.md b/pages/development.md index 5635ba22..054ddc8e 100644 --- a/pages/development.md +++ b/pages/development.md @@ -19,6 +19,32 @@ tail -f .expert/*.log Note: These log files roll over when they reach 1 megabyte, so after a time, it will be necessary to re-run the above command. +## Development server + +To start a development server with an interactive shell, you can run the +following command: + +```sh +just start +``` + +This will launch an IEx session, and it will start Expert listening +in the TCP port `9000`. + +You will need to configure your editor to connect to the Expert LSP +via TCP at that port. After that, opening you project in your editor +will connect it to the running dev server, and it will terminate it +when you close the editor. + +In this dev server you can run `:observer.start()`, and call any +function from Expert to inspect the state of the server, or run +arbitrary code. + +Since Expert needs namespacing to work, modules from the `forge` +application will be namespaced as `XPForge`; the same applies for +any module that is shared between the `expert` and `engine` +applications. + ## Debugging Expert supports a debug shell, which will connect a remote shell to a From e8a463d5b8c73aaa2c5712689b6e1150406e0dec Mon Sep 17 00:00:00 2001 From: Dorgan Date: Thu, 21 Aug 2025 14:30:08 -0300 Subject: [PATCH 4/4] fix: change wording about what the project is Co-authored-by: Mitchell Hanberg --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bafd14c9..11790b54 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Expert -Expert is a next-generation language server for the Elixir programming language. +Expert is the official language server implementation for the Elixir programming language. ## Installation