Daniel Sun created GROOVY-12411:
-----------------------------------
Summary: Add a first-party Language Server Protocol implementation
(groovy-lsp)
Key: GROOVY-12411
URL: https://issues.apache.org/jira/browse/GROOVY-12411
Project: Groovy
Issue Type: Improvement
Reporter: Daniel Sun
Ship an optional first-party language server so editors can offer Groovy
completion, navigation, diagnostics, and refactorings against the in-tree
compiler rather than a community fork.
h3. Why
Community servers ({{groovy-language-server}}, {{gvy}}/{{gls}}) lag language
changes. A module in this repository compiles with the same {{CompilationUnit}}
the rest of Groovy uses, so parser and type-system work land in the IDE
automatically.
h3. What to ship
* New optional subproject {{groovy-lsp}} (not part of {{groovy-all}})
* {{groovylsp}} / {{groovylsp.bat}} launchers (stdio JSON-RPC; optional
{{--socket}})
* LSP 3.18 over Eclipse LSP4J 1.0; unknown 3.19 fields ignored
* Compile open buffers through {{SEMANTIC_ANALYSIS}} (no class generation)
* Identifier name spans on {{AnnotatedNode}} so rename/highlight select the
name, not the whole declaration (same 1-based code-point columns as
GROOVY-12085)
h3. Language features (advertise only what is implemented)
* Incremental sync, push/pull diagnostics
* Completion (keywords, snippets, members, workspace types with auto-import,
GDK with a prefix) and {{completionItem/resolve}}
* Hover, signature help, document highlight
* Definition, type definition, implementation, declaration, references (by
declaration identity)
* Prepare-rename / rename (rename the file when the class name matches the file
stem)
* Document and workspace symbols, folding, selection range, semantic tokens,
inlay hints
* Organize imports (star, static, alias); unused-import hints
* Code actions: add import, implement abstracts, insert inferred field type,
add package from path, create missing class stub, generate accessors /
{{toString}} / {{equals}}/{{hashCode}} / constructor, add {{@Override}}
* Call hierarchy and type hierarchy
* Reference-count code lenses
h3. Safety and classpath
* {{@Grab}} and {{@ASTTest}} off unless the client sets {{grapeEnabled}} /
{{astTestEnabled}}
* Diagnostics scoped to the owning source unit (shared {{ErrorCollector}})
* No Gradle or Maven Tooling API; the client supplies {{classpath}} /
{{sourcePaths}}. If those are empty, fall back to {{src/main/groovy}} (and
friends) and jars under {{lib}} / {{libs}}
* Unchanged inputs skip recompilation; {{GroovyClassLoader}} is reused and
closed on shutdown
h3. Out of scope
* Debugger (DAP)
* Test runner
* Invoking Gradle or Maven to resolve the project
h3. How to run
{code}
groovylsp
{code}
Optional flags: {{\-\-stdio}} (default), {{\-\-socket port}}, {{\-\-help}},
{{\-\-version}}.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)