summaryrefslogtreecommitdiffstats
path: root/source/compiler-core
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-07-01 15:09:24 -0700
committerGitHub <noreply@github.com>2022-07-01 15:09:24 -0700
commit0bf899a5f8110fbea97272bdda03b68b91745e51 (patch)
tree6e6a0e0210c84e911e563fe3ca6ca4ec4c2dbf4d /source/compiler-core
parentb0ea5ed4da709312910898fa03b4dafc7a27e358 (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.cpp38
-rw-r--r--source/compiler-core/slang-language-server-protocol.h83
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;