| # Copyright 2021 The Verible Authors. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # Language Server Protocol [1] types used in this project. |
| # There is a huge number of them, so let's just add the ones needed |
| # as we go. |
| # |
| # The types defined here are generated into structs with the jcxxgen |
| # code generator, that generates structs with the necessary boilerplate to |
| # be seamlessly converted to and from json with the nlohmann/json library. |
| # |
| # [1]: https://microsoft.github.io/language-server-protocol/specification |
| |
| ServerInfo: |
| name: string |
| version: string |
| |
| InitializeResult: |
| capabilities: object # Lots. We output that directly as plain json. |
| serverInfo: ServerInfo |
| |
| Position: |
| line: integer # Zero based line |
| character: integer # Zero based column |
| |
| Range: |
| start: Position # inclusive. |
| end: Position # exclusive. |
| |
| TextDocumentIdentifier: |
| uri: string |
| |
| Location: |
| <: TextDocumentIdentifier |
| range: Range |
| |
| TextDocumentItem: |
| <:TextDocumentIdentifier |
| text: string |
| |
| TextDocumentContentChangeEvent: |
| range?: Range # Range optional; if no range given, full document replace |
| text: string |
| |
| # For hover or highlight |
| TextDocumentPositionParams: |
| textDocument: TextDocumentIdentifier |
| position: Position |
| |
| # -- Text document notifiations. These allow us to keep track of the content. |
| DidOpenTextDocumentParams: # textDocument/didOpen |
| textDocument: TextDocumentItem |
| |
| DidChangeTextDocumentParams: # textDocument/didChange |
| textDocument: TextDocumentIdentifier |
| contentChanges+: TextDocumentContentChangeEvent |
| |
| DidSaveTextDocumentParams: # textDocument/didSave |
| textDocument: TextDocumentIdentifier |
| |
| DidCloseTextDocumentParams: # textDocument/didClose |
| textDocument: TextDocumentIdentifier |
| |
| # -- textDocument/publishDiagnostics |
| Diagnostic: |
| range: Range |
| source: string = "verible" |
| message: string |
| |
| # This is a notification we send when we found something. |
| PublishDiagnosticsParams: |
| uri: string |
| diagnostics+: Diagnostic |
| |
| # -- textDocument/diagnostic |
| DocumentDiagnosticParams: |
| textDocument: TextDocumentIdentifier |
| |
| # Response is a DocumentDiagnosticReport that, according to current proposal |
| # in 3.17.0, is a FullDocumentDiagnosticReport that also |
| # can include related documents (RelatedFullDocumentDiagnosticReport). We only |
| # worry about current document for now. |
| # There is also 'unchanged' kind, but not implementing that right now. |
| FullDocumentDiagnosticReport: |
| kind: string = "full" |
| items+: Diagnostic |
| |
| # -- textDocument/codeAction |
| CodeActionParams: |
| textDocument: TextDocumentIdentifier |
| range: Range |
| |
| TextEdit: |
| range: Range |
| newText: string |
| |
| WorkspaceEdit: |
| #changes?: string->TextEdit+ # Map of file URI to associated edits... |
| # ...not yet supported by jcxxgen. Let's use object and directly add JSON |
| changes: object |
| |
| # textDocument/codeAction will return an array of these. |
| CodeAction: |
| title: string |
| kind: string # Kind of change e.g quickfix, refactor, ... |
| diagnostics+: Diagnostic # What diagnostic is this referring to ? |
| isPreferred: boolean = false |
| edit: WorkspaceEdit |
| |
| # -- textDocument/documentSymbol |
| DocumentSymbolParams: |
| textDocument: TextDocumentIdentifier |
| |
| DocumentSymbol: |
| name: string |
| kind: integer # SymbolKind enum |
| range: Range # The whole range this symbol (e.g. function/class) covers |
| selectionRange: Range # Part to be highlighted (e.g. name of class) |
| # children: DocumentSymbol[]. Since we can't to that recursively in jcxxgen, |
| # these are directly emitted as json |
| children?: object = nullptr |
| |
| # -- textDocument/documentHighlight |
| DocumentHighlightParams: |
| <: TextDocumentPositionParams |
| |
| DocumentHighlight: # response documentHighlight is [] of this. |
| range: Range |
| # there is also a highlight kind to distinguish read/write |
| |
| # -- textDocument/formatting, textDocument/rangeFormatting |
| DocumentFormattingParams: |
| textDocument: TextDocumentIdentifier |
| range?: Range # only used for textDocument/rangeFormatting |
| |
| # -- textDocument/hover |
| # https://github.com/chipsalliance/verible/issues/1187 |
| HoverParams: |
| <: TextDocumentPositionParams |
| |
| MarkupContent: |
| kind: string = "markdown" |
| value: string |
| |
| Hover: |
| contents: MarkupContent |
| range?: Range |
| |
| # == The following are not yet implemented. Steps needed == |
| # o need to be able to set up a project (knowing which files are relevant, |
| # which might require some sort of run through the build system. |
| # And convey that to the language server |
| # https://github.com/chipsalliance/verible/issues/1188 |
| # o Use the symbol table with the above project (and fix all known bugs there) |
| |
| # -- textDocument/definition (requires project + active symbol table #1189) |
| DefinitionParams: |
| <: TextDocumentPositionParams |
| |
| # Response Location[] |
| |
| # -- textDocument/declaration (requires project + active symbol table #1189) |
| DeclarationParams: |
| <: TextDocumentPositionParams |
| |
| # Response: Location[] |
| |
| # -- textDocument/references (requires project + active symbol table #1189) |
| ReferenceParams: |
| <: TextDocumentPositionParams |
| |
| # Response: Location[] |
| |
| # -- textDocument/documentLink (e.g. include files; requires project #1190) |
| DocumentLinkParams: |
| textDocument: TextDocumentIdentifier |
| |
| # Response is a DocumentLink[] |
| DocumentLink: |
| range: Range |
| target?: string # DocumentUri |