Skip to content

Commit c8dc11b

Browse files
authored
feat(tolk/rename): wrap in backticks for keyword names (#21)
Fixes #14
1 parent 6c619f0 commit c8dc11b

File tree

3 files changed

+71
-2
lines changed

3 files changed

+71
-2
lines changed

server/src/e2e/tolk/testcases/rename/basic.test

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,6 @@ Rename builtin type
480480
========================================================================
481481
fun test(): int {
482482
//! ^ bool
483-
}
484483
}
485484
------------------------------------------------------------------------
486485
The element can't be renamed.
@@ -491,7 +490,40 @@ Rename stdlib function
491490
fun test(): int {
492491
minMax();
493492
//! ^ otherFunc
494-
}
495493
}
496494
------------------------------------------------------------------------
497495
The element can't be renamed.
496+
497+
========================================================================
498+
Wrap in backtick for keyword name
499+
========================================================================
500+
fun foo() {}
501+
502+
fun test(): int {
503+
foo();
504+
//! ^ return
505+
}
506+
------------------------------------------------------------------------
507+
fun `return`() {}
508+
509+
fun test(): int {
510+
`return`();
511+
//! ^ return
512+
}
513+
514+
========================================================================
515+
Wrap in backtick for keyword name 2
516+
========================================================================
517+
fun foo() {}
518+
519+
fun test(): int {
520+
foo();
521+
//! ^ match
522+
}
523+
------------------------------------------------------------------------
524+
fun `match`() {}
525+
526+
fun test(): int {
527+
`match`();
528+
//! ^ match
529+
}

server/src/languages/tolk/lang/names-util.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,38 @@ export function trimBackticks(text: string): string {
44
}
55
return text
66
}
7+
8+
export const KEYWORDS = new Set([
9+
"tolk",
10+
"import",
11+
"global",
12+
"const",
13+
"type",
14+
"struct",
15+
"fun",
16+
"get",
17+
"mutate",
18+
"asm",
19+
"builtin",
20+
"var",
21+
"val",
22+
"return",
23+
"repeat",
24+
"if",
25+
"else",
26+
"do",
27+
"while",
28+
"break",
29+
"continue",
30+
"throw",
31+
"assert",
32+
"try",
33+
"catch",
34+
"lazy",
35+
"is",
36+
"!is",
37+
"match",
38+
"true",
39+
"false",
40+
"null",
41+
])

server/src/languages/tolk/rename/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {NamedNode} from "@server/languages/tolk/psi/TolkNode"
77
import {Reference} from "@server/languages/tolk/psi/Reference"
88
import type {Node as SyntaxNode} from "web-tree-sitter"
99
import type {Position} from "vscode-languageclient"
10+
import {KEYWORDS} from "@server/languages/tolk/lang/names-util"
1011

1112
export function provideTolkRename(params: lsp.RenameParams, file: TolkFile): WorkspaceEdit | null {
1213
const renameNode = findRenameTarget(params, file)
@@ -82,6 +83,7 @@ export function provideTolkRenamePrepare(
8283
}
8384

8485
function isValidIdentifier(name: string): boolean {
86+
if (KEYWORDS.has(name)) return false
8587
return /^[A-Z_a-z]\w*$/.test(name)
8688
}
8789

0 commit comments

Comments
 (0)