From 1050e0eb96d6c8e7a6cfb253458155e1014625c3 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 5 Dec 2023 10:06:19 -0800 Subject: Support `include` for pulling file into the current module. (#3377) * Support `include` for pulling file into the current module. * Add auto-completion, hover info and goto-def support. * Disable warning for missing `module` declaration for now. --------- Co-authored-by: Yong He --- source/slang/slang-language-server-completion.cpp | 28 +++++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'source/slang/slang-language-server-completion.cpp') diff --git a/source/slang/slang-language-server-completion.cpp b/source/slang/slang-language-server-completion.cpp index 58ee766cc..7b01dac34 100644 --- a/source/slang/slang-language-server-completion.cpp +++ b/source/slang/slang-language-server-completion.cpp @@ -293,16 +293,24 @@ List CompletionContext::gatherFi SlangResult CompletionContext::tryCompleteImport() { - static auto importStr = UnownedStringSlice("import "); - auto lineContent = doc->getLine(line); - Index pos = lineContent.indexOf(importStr); - if (pos == -1) - return SLANG_FAIL; - auto lineBeforeImportKeyword = lineContent.head(pos).trim(); - if (lineBeforeImportKeyword.getLength() != 0 && lineBeforeImportKeyword != "__exported") - return SLANG_FAIL; - - pos += importStr.getLength(); + const char* prefixes[] = { "import ", "__include ", "implementing " }; + UnownedStringSlice lineContent; + Index pos = -1; + for (auto prefix : prefixes) + { + static auto importStr = UnownedStringSlice(prefix); + lineContent = doc->getLine(line); + pos = lineContent.indexOf(importStr); + if (pos == -1) + continue; + auto lineBeforeImportKeyword = lineContent.head(pos).trim(); + if (lineBeforeImportKeyword.getLength() != 0 && lineBeforeImportKeyword != "__exported") + continue; + pos += importStr.getLength(); + goto validLine; + } + return SLANG_FAIL; +validLine:; while (pos < lineContent.getLength() && pos < col - 1 && CharUtil::isWhitespace(lineContent[pos])) pos++; if (pos < lineContent.getLength() && lineContent[pos] == '"') -- cgit v1.2.3