diff options
| author | Yong He <yonghe@outlook.com> | 2022-07-01 15:09:24 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-01 15:09:24 -0700 |
| commit | 0bf899a5f8110fbea97272bdda03b68b91745e51 (patch) | |
| tree | 6e6a0e0210c84e911e563fe3ca6ca4ec4c2dbf4d /source/compiler-core | |
| parent | b0ea5ed4da709312910898fa03b4dafc7a27e358 (diff) | |
Language server: auto completion of `import` file and directories. (#2312)
* Language server: auto completion of `import` file and directories.
* Completion of include path.
* Improvements.
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/compiler-core')
| -rw-r--r-- | source/compiler-core/slang-language-server-protocol.cpp | 38 | ||||
| -rw-r--r-- | source/compiler-core/slang-language-server-protocol.h | 83 |
2 files changed, 92 insertions, 29 deletions
diff --git a/source/compiler-core/slang-language-server-protocol.cpp b/source/compiler-core/slang-language-server-protocol.cpp index d2950b164..628baf08d 100644 --- a/source/compiler-core/slang-language-server-protocol.cpp +++ b/source/compiler-core/slang-language-server-protocol.cpp @@ -150,6 +150,17 @@ static const StructRttiInfo _makeRangeRtti() } const StructRttiInfo Range::g_rttiInfo = _makeRangeRtti(); +static const StructRttiInfo _makeTextEditRtti() +{ + TextEdit obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::TextEdit", nullptr); + builder.addField("range", &obj.range); + builder.addField("newText", &obj.newText); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo TextEdit::g_rttiInfo = _makeTextEditRtti(); + static const StructRttiInfo _makeDidOpenTextDocumentRtti() { DidOpenTextDocumentParams obj; @@ -460,6 +471,22 @@ static const StructRttiInfo _makeCompletionItemRtti() } const StructRttiInfo CompletionItem::g_rttiInfo = _makeCompletionItemRtti(); +static const StructRttiInfo _makeTextEditCompletionItemRtti() +{ + TextEditCompletionItem obj; + StructRttiBuilder builder(&obj, "LanguageServerProtocol::TextEditCompletionItem", nullptr); + builder.addField("label", &obj.label, StructRttiInfo::Flag::Optional); + builder.addField("detail", &obj.detail, StructRttiInfo::Flag::Optional); + builder.addField("kind", &obj.kind, StructRttiInfo::Flag::Optional); + builder.addField("documentation", &obj.documentation, StructRttiInfo::Flag::Optional); + builder.addField("data", &obj.data, StructRttiInfo::Flag::Optional); + builder.addField("textEdit", &obj.textEdit, StructRttiInfo::Flag::Optional); + builder.addField("commitCharacters", &obj.commitCharacters, StructRttiInfo::Flag::Optional); + builder.ignoreUnknownFields(); + return builder.make(); +} +const StructRttiInfo TextEditCompletionItem::g_rttiInfo = _makeTextEditCompletionItemRtti(); + static const StructRttiInfo _makeSemanticTokensParamsRtti() { SemanticTokensParams obj; @@ -641,17 +668,6 @@ static const StructRttiInfo _makeDocumentSymbolRtti() } const StructRttiInfo DocumentSymbol::g_rttiInfo = _makeDocumentSymbolRtti(); -static const StructRttiInfo _makeTextEditRtti() -{ - TextEdit obj; - StructRttiBuilder builder(&obj, "LanguageServerProtocol::TextEdit", nullptr); - builder.addField("range", &obj.range); - builder.addField("newText", &obj.newText); - builder.ignoreUnknownFields(); - return builder.make(); -} -const StructRttiInfo TextEdit::g_rttiInfo = _makeTextEditRtti(); - static const StructRttiInfo _makeInlayHintParamsRtti() { InlayHintParams obj; diff --git a/source/compiler-core/slang-language-server-protocol.h b/source/compiler-core/slang-language-server-protocol.h index fbc79acca..316c15c04 100644 --- a/source/compiler-core/slang-language-server-protocol.h +++ b/source/compiler-core/slang-language-server-protocol.h @@ -176,6 +176,24 @@ struct Range static const StructRttiInfo g_rttiInfo; }; +struct TextEdit +{ + /** + * The range of the text document to be manipulated. To insert + * text into a document create a range where start === end. + */ + Range range; + + /** + * The string to be inserted. For delete operations use an + * empty string. + */ + String newText; + + static const StructRttiInfo g_rttiInfo; + +}; + struct DidOpenTextDocumentParams { TextDocumentItem textDocument; @@ -605,6 +623,53 @@ struct CompletionItem static const StructRttiInfo g_rttiInfo; }; +struct TextEditCompletionItem +{ + /** + * The label of this completion item. + * + * The label property is also by default the text that + * is inserted when selecting this completion. + * + * If label details are provided the label itself should + * be an unqualified name of the completion item. + */ + String label; + + /** + * The kind of this completion item. Based of the kind + * an icon is chosen by the editor. The standardized set + * of available values is defined in `CompletionItemKind`. + */ + CompletionItemKind kind = CompletionItemKind(0); + + /** + * A human-readable string with additional information + * about this item, like type or symbol information. + */ + String detail; + + /** + * A human-readable string that represents a doc-comment. + */ + MarkupContent documentation; + + TextEdit textEdit; + + /** + * An optional set of characters that when pressed while this completion is + * active will accept it first and then type that character. *Note* that all + * commit characters should have `length=1` and that superfluous characters + * will be ignored. + */ + List<String> commitCharacters; + + // Additional data. + String data; + + static const StructRttiInfo g_rttiInfo; +}; + struct SemanticTokensParams : WorkDoneProgressParams { TextDocumentIdentifier textDocument; @@ -921,24 +986,6 @@ struct InlayHintParams static const UnownedStringSlice methodName; }; -struct TextEdit -{ - /** - * The range of the text document to be manipulated. To insert - * text into a document create a range where start === end. - */ - Range range; - - /** - * The string to be inserted. For delete operations use an - * empty string. - */ - String newText; - - static const StructRttiInfo g_rttiInfo; - -}; - typedef int InlayHintKind; const int kInlayHintKindType = 1; const int kInlayHintKindParameter = 2; |
