greybel-languageserver
v1.7.8
Published
Language server for GreyScript
Downloads
693
Maintainers
Readme
greybel-languageserver
Language server for GreyScript. Provides several features such as auto-completion, hover tooltips and more.
Should work with any other client which is following LSP standards. Feel free to take a look at a full implementation into VSCode.
Supported providers
It supports the following providers:
- completion
- hover
- color
- definition
- formatter
- signature help
- document symbol
- workspace symbol
- diagnostic
Install
npm install -g greybel-languageserver
Usage
greybel-languageserver
Example implementations
VSCode implementation
import * as path from 'path';
import {
LanguageClient,
LanguageClientOptions,
ServerOptions,
TransportKind
} from 'vscode-languageclient/node';
const serverModule = context.asAbsolutePath(
path.join('node_modules', 'greybel-languageserver', 'index.js')
);
const serverOptions: ServerOptions = {
run: { module: serverModule, transport: TransportKind.ipc }
};
const clientOptions: LanguageClientOptions = {
documentSelector: [{ scheme: 'file', language: 'greyscript' }],
synchronize: {
fileEvents: workspace.createFileSystemWatcher('**/*')
},
diagnosticCollectionName: 'greyscript'
};
const client = new LanguageClient(
'languageServerExample',
'Language Server Example',
serverOptions,
clientOptions
);
client.registerProposedFeatures();
client.start();
Sublime implementation
Install LSP Package and create the following configuration:
{
"show_diagnostics_panel_on_save": 0,
"clients": {
"greyscript": {
"enabled": true,
"command": ["greybel-languageserver", "--stdio"],
"selector": "source.greyscript"
}
}
}
Example sublime syntax file (for testing)
%YAML 1.2
---
name: greyscript
file_extensions:
- src
scope: source.greyscript
contexts:
main:
- match: '.+'
scope: text.greyscript
How to add tooltips
You can add your own meta descriptions in this repository. The workflow for this is as follows:
- create a PR with your changes in the meta repository
- create a PR with the raised version to this repository
Additionally, there is the option to define methods via comments in the code.
// @type Bar
// @property {string} virtualMoo
Bar = {}
Bar.moo = ""
// Hello world
// I am **bold**
// @description Alternative description
// @example test("title", 123)
// @param {string} title - The title of the book.
// @param {string|number} author - The author of the book.
// @return {Bar} - Some info about return
Bar.test = function(test, abc)
print "test"
return self
end function
// @type Foo
Foo = new Bar
// @return {Foo}
Foo.New = function(message)
result = new Foo
return result
end function
myVar = Foo.New
myVar.test // shows defined signature of Bar.test on hover
myVar.virtualMoo // shows virtual property of type string on hover