https://github.com/sskender/jargonlsp
Understand internal jargon instantly, directly within your editor
https://github.com/sskender/jargonlsp
jargon lsp lsp-server lspconfig neovim-lsp nvim-lsp nvim-lspconfig rpc tcp vim-lsp vscode-extension
Last synced: 5 months ago
JSON representation
Understand internal jargon instantly, directly within your editor
- Host: GitHub
- URL: https://github.com/sskender/jargonlsp
- Owner: sskender
- License: mit
- Created: 2024-11-16T14:37:55.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2025-04-06T19:04:25.000Z (6 months ago)
- Last Synced: 2025-04-06T20:20:03.588Z (6 months ago)
- Topics: jargon, lsp, lsp-server, lspconfig, neovim-lsp, nvim-lsp, nvim-lspconfig, rpc, tcp, vim-lsp, vscode-extension
- Language: Go
- Homepage:
- Size: 33.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Jargon LSP Server
Understand internal jargon instantly, directly within your editor.
## Overview
Working on a large codebase filled with company-specific terminology, acronyms, or domain-specific jargon? Keeping track of all these can be painful, especially when scattered across multiple documents and teams.
**Jargon LSP Server** is a lightweight, Language Server Protocol ([LSP](https://en.wikipedia.org/wiki/Language_Server_Protocol)) server written in Go. It allows you to query definitions of unknown terms directly in your code editor, powered by a customizable dictionary file. The server is editor-agnostic and filetype-agnostic. It integrates seamlessly with any LSP-capable editor, such as Neovim, VSCode, Sublime, etc.

*Tested primarily with Neovim, but should work across different editors.*
## Why LSP?
You might wonder: why implement this as an LSP server instead of a native plugin?
- **Editor-Agnostic**: One implementation, usable across all editors that support LSP.
- **Filetype-Agnostic**: Works with any file type - source code, configs, documentation, etc.
- **Extensible & Scalable**: Easier to evolve, debug, and add features (e.g., TCP support in the future).
- **Learning Value**: A practical project to dive deep into LSP internals, communication protocols, and editor integrations - Neovim especially.
## Features
- **Customizable Dictionary**: Load any JSON dictionary file with term-definition mappings.
- **Hover Support**: Get definitions by hovering over tokens.
- **Multiple Dictionaries**: Use per-project dictionaries by configuring dictionary paths.
- **Minimal Dependencies**: No overhead - runs anywhere Go runs.
## Installation
### Prerequisites
- Go v1.18+
### Build & Install
```sh
git clone https://github.com/sskender/jargonlsp
cd jargonlsp
go build -o jargonlsp
sudo mv jargonlsp /usr/local/bin/
```### Prepare Dictionary
Create a JSON dictionary file structured like:
```json
{
"AMM": "A decentralized asset trading pool that enables market participants to buy or sell cryptocurrencies. Uniswap is the most well-known AMM.",
"APR": "Annual percentage rate (APR) represents the yearly rate charged for borrowing money, represented as a percentage.",
"APY": "Annual percentage yield (APY) is similar to APR, but refers to money earned in a savings account or other investment, rather than the interest rate paid on a loan.",
"dApp": "A decentralized Web3 software application that normally runs on a blockchain.",
"DAO": "Distributed Autonomous Organization.",
"HODL": "HODL was initially a spelling error of 'hold' that became a term that was embraced as an inside joke by the early adopters of Bitcoin and Ethereum.",
"Oracle": "A trusted feed of data, such as the current market prices of an asset or assets, that provides confidence to users that the data are timely, accurate, and untampered.",
"ROI": "Return On Investment. The gains or losses on an investment.",
"TVL": "The Total Value Locked into a Smart Contract or set of Smart Contracts that may be deployed or stored at one or more exchanges or markets."
}
```You can maintain one central glossary or project-specific dictionaries, and even optionally automate updates by parsing internal documentation.
### Editor Setup
Example for Neovim:
```lua
local lspconfig = require("lspconfig")
local configs = require("lspconfig.configs")configs.jargonlsp = {
default_config = {
cmd = { "jargonlsp", "--dictionary=/path/to/glossary.json" },
filetypes = { "json", "python" },
root_dir = vim.fn.getcwd(),
capabilities = lspconfig.util.default_config.capabilities,
}
}lspconfig.jargonlsp.setup({
on_attach = function(client, bufnr)
print("JargonLSP attached successfully")
end
})
```Use the `hover` action to view definitions under your cursor.
If you are already using LSP hovers for other servers, you can bind this one to a separate key to avoid conflicts.## Future Work
- **TCP Support**: Current implementation uses standard input/output (stdio) communication. Future versions will add optional TCP-based communication to support more flexible setups like remote usage.
- **Advanced Matching**: Token normalization, fuzzy matching, and support for multi-word phrases.
## Disclaimer & Considerations
- The LSP server does not attempt to parse language syntax. It operates purely on token boundaries.
- Dictionary accuracy and updates are user-maintained. Automation scripts for parsing company glossaries are recommended.
- Be mindful of editor-specific LSP quirks when configuring LSP settings.