https://github.com/desdaemon/odoo-lsp
Language server for Odoo Python/JS/XML
https://github.com/desdaemon/odoo-lsp
intellisense lsp-server odoo python tower-lsp xml
Last synced: 6 months ago
JSON representation
Language server for Odoo Python/JS/XML
- Host: GitHub
- URL: https://github.com/desdaemon/odoo-lsp
- Owner: Desdaemon
- License: other
- Created: 2023-08-18T23:10:15.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-04-12T00:50:04.000Z (over 1 year ago)
- Last Synced: 2024-04-14T11:10:37.098Z (over 1 year ago)
- Topics: intellisense, lsp-server, odoo, python, tower-lsp, xml
- Language: Rust
- Homepage:
- Size: 2.81 MB
- Stars: 14
- Watchers: 2
- Forks: 0
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# odoo-lsp
[](https://github.com/Desdaemon/odoo-lsp/actions/workflows/nightly.yml)
[](https://github.com/Desdaemon/odoo-lsp/actions/workflows/test.yml)
[](https://codecov.io/gh/Desdaemon/odoo-lsp)
[](https://marketplace.visualstudio.com/items?itemName=Desdaemon.odoo-lsp)
[](https://open-vsx.org/extension/Desdaemon/odoo-lsp)## Features
### Completion, definition and references for models, XML IDs and model fields
Works for `record`s, `template`s, `env.ref()` and other structures.
For VSCode, also includes schema-based validation and completions for Odoo XML.[](https://asciinema.org/a/604545)
### Browse models and XML records as workspace symbols
[](https://asciinema.org/a/604560)
### Syntax enhancements
Provides syntax highlighting in VSCode for Python, JavaScript, and XPath expressions in Odoo XML.
https://github.com/Desdaemon/odoo-lsp/assets/36768030/6003d5fe-9617-41df-ae3d-a704af77455c
For more features check out the [wiki].
## Install
The VSCode extension handles downloading the latest releases automatically; other editors need `odoo-lsp` on the path.
Nightly binaries are also available for major platforms, please check [Releases] for the latest downloads.```bash
# One-line
curl -L https://github.com/Desdaemon/odoo-lsp/releases/download/latest/odoo-lsp-x86_64-unknown-linux-musl.tgz | tar -xzvf -# Apple Silicon
curl -L https://github.com/Desdaemon/odoo-lsp/releases/download/latest/odoo-lsp-aarch64-apple-darwin.tgz | tar -xzvf -# With cargo-binstall
cargo binstall odoo-lsp# Install from source
cargo install odoo-lsp# Update in-place, optionally with --nightly
odoo-lsp self-update
```## Setup
For detailed usage instructions please check the [wiki] (work in progress).
### VSCode
odoo-lsp is available from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=Desdaemon.odoo-lsp) and the
[Open VSX Registry](https://open-vsx.org/extension/Desdaemon/odoo-lsp). Alternatively, you can grab the latest nightly builds from [Releases].### Helix
See [.helix/languages.toml](./examples/.helix/languages.toml)
1. Ensure that you have `odoo-lsp` on your path
2. Determine your Helix runtime folder, e.g. `~/.config/helix/` on Linux
3. Modify `languages.toml` in your Helix runtime folder (create one if none exists) to include these lines:```toml
[language-server]
# Update the path to match your setup
odoo-lsp.command = "odoo-lsp"[[language]]
name = "xml"
language-servers = ["odoo-lsp"]
roots = [".odoo_lsp", ".odoo_lsp.json"][[language]]
name = "python"
roots = [
".odoo_lsp", ".odoo_lsp.json",
# add the default roots here
]
# Order is important here
language-servers = [
"odoo-lsp",
# add the default language servers here
"pylsp",
# and any you need
]
```4. Alternatively, modify `$ROOT/.helix/languages.toml` where `$ROOT` is your Odoo modules root to include the above lines.
### Neovim via [lsp-zero.nvim]
Instructions copied from [lsp-zero docs](https://lsp-zero.netlify.app/v3.x/language-server-configuration.html#custom-servers)
1. Ensure that you have `odoo-lsp` on your path
2. Configure your Neovim (Lua) configuration file e.g. at `~/.config/nvim/init.lua` to use [lsp-zero.nvim],
adding odoo-lsp as a new server before calling `lsp.setup()`:```lua
-- lsp-zero stanza
local lsp = require('lsp-zero').preset({})
lsp.on_attach(function(client, bufnr)
lsp.default_keymaps({buffer = bufnr})
end)local lspconfigs = require 'lspconfig.configs'
-- define our custom language server here
lspconfigs.odoo_lsp = {
default_config = {
name = 'odoo-lsp',
cmd = {'odoo-lsp'},
filetypes = {'javascript', 'xml', 'python'},
root_dir = require('lspconfig.util').root_pattern('.odoo_lsp', '.odoo_lsp.json', '.git')
}
}local configured_lsps = {
odoo_lsp = {},
-- optional but recommended, requires pyright-langserver on path
pyright = {},
}local lspconfig = require 'lspconfig'
for name, config in pairs(configured_lsps) do
lspconfig[name].setup(config)
end-- LSP setup done
lsp.setup()
```A complete example can be found in [examples/init.lua](examples/init.lua).
## Troubleshooting
Run your editor with the `RUST_LOG` environment variable like below, e.g. for VSCode:
```shell
RUST_LOG=odoo_lsp=debug code ..
```This will enable debug logs for the _LSP server_ itself, which can be seen via your editor's logging mechanism.
Please include these logs when opening an issue.## Development
Don't know where to start? Run `cargo doc --bin odoo-lsp` for a quick overview of the codebase. All contributions welcome!
1. `pnpm i`
2. `cargo build`
3. In VSCode, press F5 or change to the Debug panel and click `Launch Client`> **Note**
> If encountered errors like `Cannot find module '/xxx/xxx/dist/extension.js'`
> please try run command `tsc -b` manually, you could refer https://github.com/IWANABETHATGUY/tower-lsp-boilerplate/issues/6 for more details[wiki]: https://github.com/Desdaemon/odoo-lsp/wiki
[Releases]: https://github.com/Desdaemon/odoo-lsp/releases
[lsp-zero.nvim]: https://github.com/VonHeikemen/lsp-zero.nvim