diff options
| author | Yong He <yonghe@outlook.com> | 2024-08-12 20:53:03 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-12 20:53:03 -0700 |
| commit | b390566b55700582321b09b72c726b8dff9bd819 (patch) | |
| tree | a2fd8e50fcbde29dd2651e08a78021f2ae9d72de /source/slang/slang-language-server.cpp | |
| parent | 20bd48659d0009de5477380c335e2419f4c66f8b (diff) | |
Support unicode identifier names. (#4772)
* Support unicode identifier names.
* Fix.
* Fix language server.
* Fix build errors.
* Fix.
* Fix offset translation in language server.
Diffstat (limited to 'source/slang/slang-language-server.cpp')
| -rw-r--r-- | source/slang/slang-language-server.cpp | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp index 09b14932c..ed03a5dc4 100644 --- a/source/slang/slang-language-server.cpp +++ b/source/slang/slang-language-server.cpp @@ -654,9 +654,12 @@ SlangResult LanguageServer::hover( maybeAppendAdditionalOverloadsHint(); auto nodeHumaneLoc = version->linkage->getSourceManager()->getHumaneLoc(leafNode->loc); - hover.range.start.line = int(nodeHumaneLoc.line - 1); - hover.range.end.line = int(nodeHumaneLoc.line - 1); - hover.range.start.character = int(nodeHumaneLoc.column - 1); + doc->oneBasedUTF8LocToZeroBasedUTF16Loc( + nodeHumaneLoc.line, + nodeHumaneLoc.column, + hover.range.start.line, + hover.range.start.character); + hover.range.end = hover.range.start; auto name = declRef.getName(); if (auto ctorDecl = declRef.as<ConstructorDecl>()) { @@ -668,17 +671,19 @@ SlangResult LanguageServer::hover( } if (name) { - hover.range.end.character = int(nodeHumaneLoc.column + name->text.getLength() - 1); + hover.range.end.character = hover.range.start.character + (int)UTF8Util::calcUTF16CharCount(name->text.getUnownedSlice()); } } }; auto fillLoc = [&](SourceLoc loc) { auto humaneLoc = version->linkage->getSourceManager()->getHumaneLoc(loc, SourceLocType::Actual); - hover.range.start.line = int(humaneLoc.line - 1); - hover.range.end.line = int(humaneLoc.line - 1); - hover.range.start.character = int(humaneLoc.column - 1); - hover.range.end.character = hover.range.start.character + int(doc->getTokenLength(humaneLoc.line, humaneLoc.column)); + doc->oneBasedUTF8LocToZeroBasedUTF16Loc(humaneLoc.line, humaneLoc.column, hover.range.start.line, hover.range.start.character); + doc->oneBasedUTF8LocToZeroBasedUTF16Loc( + humaneLoc.line, + humaneLoc.column + doc->getTokenLength(humaneLoc.line, humaneLoc.column), + hover.range.end.line, + hover.range.end.character); }; auto fillExprHoverInfo = [&](Expr* expr) { @@ -851,7 +856,7 @@ SlangResult LanguageServer::gotoDefinition( : declRefExpr->declRef.getLoc(), SourceLocType::Actual); auto name = declRefExpr->declRef.getName(); - locations.add(LocationResult{location, name ? (int)name->text.getLength() : 0}); + locations.add(LocationResult{location, name ? (int)UTF8Util::calcUTF16CharCount(name->text.getUnownedSlice()) : 0}); } } else if (auto overloadedExpr = as<OverloadedExpr>(leafNode)) @@ -863,7 +868,7 @@ SlangResult LanguageServer::gotoDefinition( auto location = version->linkage->getSourceManager()->getHumaneLoc( item.declRef.getNameLoc(), SourceLocType::Actual); auto name = item.declRef.getName(); - locations.add(LocationResult{location, name ? (int)name->text.getLength() : 0}); + locations.add(LocationResult{location, name ? (int)UTF8Util::calcUTF16CharCount(name->text.getUnownedSlice()) : 0}); } } else @@ -874,7 +879,7 @@ SlangResult LanguageServer::gotoDefinition( auto location = version->linkage->getSourceManager()->getHumaneLoc( item.declRef.getNameLoc(), SourceLocType::Actual); auto name = item.declRef.getName(); - locations.add(LocationResult{location, name ? (int)name->text.getLength() : 0}); + locations.add(LocationResult{location, name ? (int)UTF8Util::calcUTF16CharCount(name->text.getUnownedSlice()) : 0}); } } } @@ -909,8 +914,11 @@ SlangResult LanguageServer::gotoDefinition( { result.uri = URI::fromLocalFilePath(loc.loc.pathInfo.foundPath.getUnownedSlice()).uri; - result.range.start.line = int(loc.loc.line - 1); - result.range.start.character = int(loc.loc.column - 1); + doc->oneBasedUTF8LocToZeroBasedUTF16Loc( + loc.loc.line, + loc.loc.column, + result.range.start.line, + result.range.start.character); result.range.end = result.range.start; result.range.end.character += loc.length; results.add(result); |
