{"id":13509806,"url":"https://github.com/dm1try/ilexir","last_synced_at":"2025-03-30T14:31:48.825Z","repository":{"id":69478309,"uuid":"66458830","full_name":"dm1try/ilexir","owner":"dm1try","description":"Elixir + Neovim = :couple:","archived":true,"fork":false,"pushed_at":"2017-05-07T15:25:00.000Z","size":311,"stargazers_count":8,"open_issues_count":8,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-04-22T13:34:04.860Z","etag":null,"topics":["elixir","linter","neovim"],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dm1try.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2016-08-24T11:35:14.000Z","updated_at":"2023-01-28T18:50:10.000Z","dependencies_parsed_at":"2023-04-28T12:55:51.491Z","dependency_job_id":null,"html_url":"https://github.com/dm1try/ilexir","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dm1try%2Filexir","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dm1try%2Filexir/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dm1try%2Filexir/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dm1try%2Filexir/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dm1try","download_url":"https://codeload.github.com/dm1try/ilexir/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246332220,"owners_count":20760442,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elixir","linter","neovim"],"created_at":"2024-08-01T02:01:13.544Z","updated_at":"2025-03-30T14:31:45.325Z","avatar_url":"https://github.com/dm1try.png","language":"Elixir","funding_links":[],"categories":["Editors"],"sub_categories":[],"readme":"# Ilexir [![Build Status](https://travis-ci.org/dm1try/ilexir.svg?branch=master)](https://travis-ci.org/dm1try/ilexir)\n## Requirements\n  - Neovim \u003e= 1.6-dev\n  - [Elixir host](https://github.com/dm1try/nvim#installation)\n  \n\u003e Windows platform is not supported.\n\n## Install\n1. Add the plugin to vim runtime.                                                                                                                             \n\u003evim-plug example: `Plug 'dm1try/ilexir'`\n    \n2. Run `UpdateElixirPlugins` command.\n3. Restart the editor.\n\n## Usage\n  \u003e On the way: Take a look at this asciinema demo for a quick start.\n  \n### Common commands:\n  - `IlexirStartApp /path/to/app` - runs a hosted app in the specified directory.\n  -  `IlexirStartInWorkingDir` - the shortcut for running in current working directory.  \n     Available options:\n     - `env` - app enviroment *(default \"dev\")*                           \n     - `script` - start script for mix apps *(default \"app.start\")*  \n\n \u003e IlexirStartInWorkingDir --env dev --script phoenix.server\n    \n    \n  - `IlexirOpenIex` - opens IEx for a running app.\n  - `IlexirEval` - evals selected lines.\n  \n### Editor settings\n  `ilexir_autocompile` - `1`(default) or `0`, enable/disable auto compiling.\n  The file can be compiled manually by `IlexirCompile` command. See the architecture section for details.\n  \u003e Changes for this var are applied in runtime `:let ilexir_autocompile = 0`\n  \n## Features\n - \"smart\" omni completion\n \n ![autocomplete](https://cloud.githubusercontent.com/assets/486807/20452668/8cfb84aa-ae20-11e6-94f3-3cbb9a6dfbce.gif)\n \n - \"on-the-fly\" linters\n  - ast (it validates the AST:) it's only usefull if autocompilation is disabled)\n  - compiler (compiler errors and warnings must be fixed ASAP)\n  - xref (it validates the runtime code for unreachable module/functions)\n  \n ![linters](https://cloud.githubusercontent.com/assets/486807/20470386/2c357f46-afb9-11e6-8661-4ecd6078ef76.gif)\n\n - app integration\n  - multiple applications support (with different enviroments)\n  - iex shell (stdio is piped to a separated buffer)\n  \n ![apps](https://cloud.githubusercontent.com/assets/486807/20512240/394f54c8-b08f-11e6-84ec-cdc19020d2f9.gif)\n  \n - \"live\" evaluation\n \n ![eval](https://cloud.githubusercontent.com/assets/486807/20507792/19d16c1a-b06e-11e6-9fd4-ea70a2a97fa3.gif)\n \n - jump to definition\n\n - open online documentation\n  - for elixir packages using hexdocs.pm (respects the package version)\n  - for Elixir core (also respects the version)\n  - for erlang stdlib (does not respect OTP version, opens docs for the latest release)\n\n - core components are editor agnostic\n\n## Development \n### Architecture\n\"Hosted\" app is your app that is bootstrapped with bunch of hosted components. The app is running on remote erlang node.\n\u003e In case you are playing around with a simple script outside of any app,             \n\u003e  it will be just a node with running `elixir` on it. See the demo above.\n\nThe hosted components work inside your running app enviroment, so they can inspect the app and provide the data on demand to \"editor-specific\" components. They talk to each other through `:rpc` module.\n\n\n```elixir\n                             +                 +---------------------+\n                             |             +---\u003e  HOSTED COMPONENTS  +--------+\n                             |             |   +---------------------+        |\n      nvim + elixir host     |             |      |  compiler     |           |\n                             |             |      +---------------+           |\n  +----------------------+   |             |      |  linters      |           |\n  |           |          |   |             |      +---------------+           |\n  | +-----    | +----+   |   |             |      |  evaluator    |           |\n  | |-------+ | +------+ |   |             |      +---------------+           |\n  | |----|    |          |   |             |      |  ...          |           |\n  | |----|    | +-----+  |   |             |      +---------------+           |\n  | |-------+ | |------+ |   |             |                                  |\n  | +-------+ | +----+   |   |    +------------------+  rpc  +----------------v-------+\n  |           |          |   |    |       CORE       \u003c-------\u003e    NODES(app \u0026 hosted) |\n  +----------------------+   |    +------------------+       +------------------------+\n  | +----+               |   |      |  hosted app  |            |  app1.dev        |\n  |                      |   |      |   manager    |            +------------------+\n  +----------------------+   |      +--------------+            +------------------+\n                             |      | nvim specific|            |  app1.test       |\n                             |      |  components: |            +------------------+\n                             |      | +----------+ |            +------------------+\n                             |      | | quickfix | |            |  umbrella1.dev   |\n                             |      | +----------+ |            +------------------+\n                             |      | | toolwin  | |            +------------------+\n                             |      | +----------+ |            |  ...             |\n                             |      +--------------+            +------------------+\n                             |\n                             +\n\n\n```\n\nElixir core building blocks(`def/defmodule/alias/use/import`) are macros that are applied directly to AST so the provided solution is \"compile-first\". The information provided by plugin components will be a more \"accurate\" if a working file is processed by the Ilexir compiler. The compiler pre-saves(in memory) useful data between compilations(such as __ENV__ module struct) and also notifies other components during/after the compilation that they can handle the data for their own needs.\n\n### Setup locally\nClone the repo and add it to neovim runtime.\n\u003e vim-plug example: `Plug '/home/user/Projects/ilexir'`\n\n`ElixirHostLog` and `ElixirReloadScript` are useful [Elixir host](https://github.com/dm1try/nvim#installation) commands for a playing with local changes.\n\n### Testing\nRun tests:\n  `mix espec`\n### Writing components\n\u003e Coming soon\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdm1try%2Filexir","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdm1try%2Filexir","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdm1try%2Filexir/lists"}