diff --git a/server/src/e2e/tolk/testcases/rename/basic.test b/server/src/e2e/tolk/testcases/rename/basic.test index 94ad03a4..a3d07e66 100644 --- a/server/src/e2e/tolk/testcases/rename/basic.test +++ b/server/src/e2e/tolk/testcases/rename/basic.test @@ -480,7 +480,6 @@ Rename builtin type ======================================================================== fun test(): int { //! ^ bool - } } ------------------------------------------------------------------------ The element can't be renamed. @@ -491,7 +490,40 @@ Rename stdlib function fun test(): int { minMax(); //! ^ otherFunc - } } ------------------------------------------------------------------------ The element can't be renamed. + +======================================================================== +Wrap in backtick for keyword name +======================================================================== +fun foo() {} + +fun test(): int { + foo(); +//! ^ return +} +------------------------------------------------------------------------ +fun `return`() {} + +fun test(): int { + `return`(); +//! ^ return +} + +======================================================================== +Wrap in backtick for keyword name 2 +======================================================================== +fun foo() {} + +fun test(): int { + foo(); +//! ^ match +} +------------------------------------------------------------------------ +fun `match`() {} + +fun test(): int { + `match`(); +//! ^ match +} diff --git a/server/src/languages/tolk/lang/names-util.ts b/server/src/languages/tolk/lang/names-util.ts index 2246c853..738ead81 100644 --- a/server/src/languages/tolk/lang/names-util.ts +++ b/server/src/languages/tolk/lang/names-util.ts @@ -4,3 +4,38 @@ export function trimBackticks(text: string): string { } return text } + +export const KEYWORDS = new Set([ + "tolk", + "import", + "global", + "const", + "type", + "struct", + "fun", + "get", + "mutate", + "asm", + "builtin", + "var", + "val", + "return", + "repeat", + "if", + "else", + "do", + "while", + "break", + "continue", + "throw", + "assert", + "try", + "catch", + "lazy", + "is", + "!is", + "match", + "true", + "false", + "null", +]) diff --git a/server/src/languages/tolk/rename/index.ts b/server/src/languages/tolk/rename/index.ts index 0a5f5e02..24e56ddd 100644 --- a/server/src/languages/tolk/rename/index.ts +++ b/server/src/languages/tolk/rename/index.ts @@ -7,6 +7,7 @@ import {NamedNode} from "@server/languages/tolk/psi/TolkNode" import {Reference} from "@server/languages/tolk/psi/Reference" import type {Node as SyntaxNode} from "web-tree-sitter" import type {Position} from "vscode-languageclient" +import {KEYWORDS} from "@server/languages/tolk/lang/names-util" export function provideTolkRename(params: lsp.RenameParams, file: TolkFile): WorkspaceEdit | null { const renameNode = findRenameTarget(params, file) @@ -82,6 +83,7 @@ export function provideTolkRenamePrepare( } function isValidIdentifier(name: string): boolean { + if (KEYWORDS.has(name)) return false return /^[A-Z_a-z]\w*$/.test(name) }