Skip to content

Commit

Permalink
Introduce ralph-lsp
Browse files Browse the repository at this point in the history
  • Loading branch information
tdroxler committed Apr 24, 2024
1 parent 704d561 commit c18ebd7
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 24 deletions.
73 changes: 68 additions & 5 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@
"lint": "eslint src --ext ts,js --fix",
"fmt": "prettier --write .",
"test": "jest",
"antlr4ts": "antlr4ts -visitor ./src/parser/*.g4",
"update-builtin-schema": "curl -o ./src/provider/builtin/ralph-built-in-functions.json https://raw.githubusercontent.com/alephium/alephium/v${npm_package_config_alephium_version}/protocol/src/main/resources/ralph-built-in-functions.json"
},
"dependencies": {
Expand All @@ -141,12 +140,13 @@
"prettier": "^2.8.1",
"request": "^2.88.2",
"request-progress": "^3.0.0",
"request-promise-native": "^1.0.9"
"request-promise-native": "^1.0.9",
"vscode-languageclient": "^9.0.1"
},
"devDependencies": {
"@types/chai": "^4.3.4",
"@types/crypto-js": "^4.1.1",
"@types/node": "^18.11.18",
"@types/node": "^18.19.31",
"@types/prettier": "^2.7.2",
"@types/request": "^2.48.8",
"@types/request-promise-native": "^1.0.18",
Expand Down
51 changes: 35 additions & 16 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ import cache from './cache/cache'
import { EmitProvider } from './provider/completion/emitProvider'
import { parser, registerEvent } from './event'
import { ContractBuiltInProvider } from './provider/completion/contractBuiltinProvider'
import {LanguageClient, LanguageClientOptions, ServerOptions, TransportKind} from 'vscode-languageclient/node';

let client: LanguageClient;

// this method is called when your extension is activated
// your extension is activated the very first time the command is executed
Expand All @@ -41,32 +44,48 @@ export async function activate(context: vscode.ExtensionContext) {
})

const selector = { scheme: 'file', language: 'ralph' }
hoverProvider().forEach((value) => context.subscriptions.push(vscode.languages.registerHoverProvider(selector, value)))
context.subscriptions.push(vscode.languages.registerDocumentFormattingEditProvider(selector, new FormatterProvider()))
context.subscriptions.push(vscode.languages.registerDocumentSymbolProvider(selector, new SymbolProvider()))
context.subscriptions.push(vscode.languages.registerWorkspaceSymbolProvider(new SymbolProvider()))
// context.subscriptions.push(vscode.languages.registerCompletionItemProvider(selector, new GlobalProvider()))
context.subscriptions.push(vscode.languages.registerCompletionItemProvider(selector, new ContractBuiltInProvider(), '.'))
context.subscriptions.push(vscode.languages.registerCompletionItemProvider(selector, new BuiltInProvider()))
context.subscriptions.push(vscode.languages.registerCompletionItemProvider(selector, new IdentifierProvider()))
context.subscriptions.push(vscode.languages.registerCompletionItemProvider(selector, new EmitProvider(), 'emit'))
context.subscriptions.push(vscode.languages.registerCompletionItemProvider(selector, new AnnotationProvider(), '@', '(', ')'))
// context.subscriptions.push(vscode.languages.registerCompletionItemProvider(selector, new EnumProvider(), '.'))
context.subscriptions.push(vscode.languages.registerCompletionItemProvider(selector, new MemberProvider(), '.'))
context.subscriptions.push(vscode.languages.registerDefinitionProvider(selector, new DefinitionProvider()))
context.subscriptions.push(vscode.languages.registerRenameProvider(selector, new RalphRenameProvider()))
context.subscriptions.push(vscode.languages.registerSignatureHelpProvider(selector, new RalphSignatureHelpProvider(), '(', ')', ','))
context.subscriptions.push(vscode.languages.registerImplementationProvider(selector, new RalphImplementationProvider()))
context.subscriptions.push(vscode.languages.registerTypeDefinitionProvider(selector, new RalphTypeDefinitionProvider()))
context.subscriptions.push(vscode.languages.registerReferenceProvider(selector, new RalphReferenceProvider()))
context.subscriptions.push(vscode.languages.registerTypeHierarchyProvider(selector, new RalphTypeHierarchyProvider()))

console.log('register push completed!')

console.log("Activating Ralph LSP client");

const serverOptions: ServerOptions = {
command: "ralph-lsp",
transport: TransportKind.stdio,
options: {
shell: true
}
};

const clientOptions: LanguageClientOptions = {
documentSelector: [
{pattern: '**/*.ral'},
{language: 'json', pattern: '**/ralph.json'},
]
};

// Create the client and store it.
client = new LanguageClient(
'ralph-lsp',
'Ralph LSP',
serverOptions,
clientOptions
);

// Start the client.
client.start();
}

// this method is called when your extension is deactivated
export function deactivate() {
clearInterval(timerId)
if (!client) {
return undefined;
}
return client.stop();
}

async function init() {
Expand Down

0 comments on commit c18ebd7

Please sign in to comment.