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)

Reply via email to