feat: improve editor tooling and fix warnings

Neovim improvements:
- Add tree-sitter text objects for functions, types, blocks
- Add folding support
- Enhanced REPL integration (toggle, send line/selection)
- New commands: LuxCheck, LuxReplToggle, LuxSend
- Better keybindings with localleader

VS Code extension:
- Full syntax highlighting with TextMate grammar
- LSP client integration
- 20+ snippets for common patterns
- Commands: run, format, check, REPL
- Keybindings and context menu

Fixes:
- Fix all cargo warnings with #[allow(dead_code)] annotations
- Clean up unused variables

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-13 18:23:55 -05:00
parent ebc0bdb109
commit a6eb349d59
14 changed files with 1437 additions and 9 deletions

150
editors/vscode/package.json Normal file
View File

@@ -0,0 +1,150 @@
{
"name": "lux-lang",
"displayName": "Lux Language",
"description": "Language support for Lux - a functional language with algebraic effects",
"version": "0.1.0",
"publisher": "lux-lang",
"repository": {
"type": "git",
"url": "https://github.com/lux-lang/lux"
},
"engines": {
"vscode": "^1.75.0"
},
"categories": [
"Programming Languages"
],
"keywords": [
"lux",
"functional",
"effects",
"algebraic effects"
],
"activationEvents": [
"onLanguage:lux"
],
"main": "./out/extension.js",
"contributes": {
"languages": [
{
"id": "lux",
"aliases": ["Lux", "lux"],
"extensions": [".lux"],
"configuration": "./language-configuration.json",
"icon": {
"light": "./icons/lux-light.png",
"dark": "./icons/lux-dark.png"
}
}
],
"grammars": [
{
"language": "lux",
"scopeName": "source.lux",
"path": "./syntaxes/lux.tmLanguage.json"
}
],
"configuration": {
"title": "Lux",
"properties": {
"lux.lspPath": {
"type": "string",
"default": "",
"description": "Path to the Lux binary. If empty, searches PATH."
},
"lux.lsp.enabled": {
"type": "boolean",
"default": true,
"description": "Enable the Lux language server"
},
"lux.format.onSave": {
"type": "boolean",
"default": false,
"description": "Format files on save"
},
"lux.diagnostics.enabled": {
"type": "boolean",
"default": true,
"description": "Enable inline diagnostics"
}
}
},
"commands": [
{
"command": "lux.run",
"title": "Lux: Run Current File"
},
{
"command": "lux.format",
"title": "Lux: Format Document"
},
{
"command": "lux.check",
"title": "Lux: Type Check File"
},
{
"command": "lux.startRepl",
"title": "Lux: Start REPL"
},
{
"command": "lux.sendToRepl",
"title": "Lux: Send Selection to REPL"
},
{
"command": "lux.restartLsp",
"title": "Lux: Restart Language Server"
}
],
"keybindings": [
{
"command": "lux.run",
"key": "ctrl+shift+r",
"mac": "cmd+shift+r",
"when": "editorLangId == lux"
},
{
"command": "lux.sendToRepl",
"key": "ctrl+enter",
"mac": "cmd+enter",
"when": "editorLangId == lux && editorHasSelection"
}
],
"menus": {
"editor/context": [
{
"command": "lux.run",
"when": "editorLangId == lux",
"group": "lux"
},
{
"command": "lux.sendToRepl",
"when": "editorLangId == lux && editorHasSelection",
"group": "lux"
}
]
},
"snippets": [
{
"language": "lux",
"path": "./snippets/lux.json"
}
]
},
"scripts": {
"vscode:prepublish": "npm run compile",
"compile": "tsc -p ./",
"watch": "tsc -watch -p ./",
"lint": "eslint src --ext ts"
},
"devDependencies": {
"@types/node": "^18.x",
"@types/vscode": "^1.75.0",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"eslint": "^8.0.0",
"typescript": "^5.0.0"
},
"dependencies": {
"vscode-languageclient": "^9.0.0"
}
}