Skip to content

Commit 8c71d26

Browse files
committed
fix: Rename bad postfix
1 parent 49cb3b7 commit 8c71d26

6 files changed

Lines changed: 82 additions & 48 deletions

File tree

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,6 @@ Highlights scope names with their own themed colour in realtime:
8888
* Fix TreeSitter minified empty repo name
8989
* Parse regexes with [oniguruma-parser](https://github.com/slevithan/oniguruma-parser)
9090
* Update YAML and Ascii Plist grammars
91-
* Add auto scopeName suffix detection and completion
92-
* [F2] Rename sub.scopes
9391
* Support Atom
9492
* Fix include scopeName highlight (ignore #repo suffix)
9593
* Add note for single patterns array inside repo

src/Providers/RenameProvider.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,13 @@ export const RenameProvider: vscode.RenameProvider = {
2929

3030
switch (cursorName) {
3131
case 'scope':
32+
if (!cursorText.includes('.')) {
33+
break;
34+
}
35+
3236
const scopePostfix = cursorText.split('.').pop()!;
3337
if (cursorRange.end.translate(0, -scopePostfix.length).isBeforeOrEqual(position)) {
3438
const candidateScopes = findCandidateScopePostfixes(rootNode, position);
35-
// const candidates = candidateScopes.candidates.sort(
36-
// (a, b) => {
37-
// if (a.length < b.length) {
38-
// return 1;
39-
// }
40-
// if (a.length > b.length) {
41-
// return -1;
42-
// }
43-
// return 0;
44-
// });
4539
for (const candidate of candidateScopes.candidatePostfixes) {
4640
if (cursorText.endsWith('.' + candidate)) {
4741
return {
@@ -53,6 +47,14 @@ export const RenameProvider: vscode.RenameProvider = {
5347
};
5448
}
5549
}
50+
51+
return {
52+
range: new vscode.Range(
53+
cursorRange.end.translate(0, -scopePostfix.length),
54+
cursorRange.end,
55+
),
56+
placeholder: scopePostfix,
57+
};
5658
}
5759
}
5860
// if (cursorName == 'root_scopeName') {
@@ -144,6 +146,12 @@ export const RenameProvider: vscode.RenameProvider = {
144146
break;
145147
}
146148
}
149+
if (!query) {
150+
scopePostfixCandidate = scopePostfix;
151+
query = `;scm
152+
((scope) @scopePostfix (#match? @scopePostfix "\\\\.${scopePostfix.replaceAll(/[\\|([{}\]).?*+^$]/g, '\\\\$&')}$"))
153+
`;
154+
}
147155
}
148156
else {
149157
query += `;scm

src/test/baselines/DefinitionReferenceProvider.json

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
"endColumn": 24
8585
},
8686
"range": {
87-
"startLineNumber": 17,
87+
"startLineNumber": 19,
8888
"startColumn": 3,
8989
"endLineNumber": 14,
9090
"endColumn": 4
@@ -102,13 +102,13 @@
102102
[
103103
{
104104
"originSelectionRange": {
105-
"startLineNumber": -16,
105+
"startLineNumber": -18,
106106
"startColumn": 17,
107107
"endLineNumber": 0,
108108
"endColumn": 25
109109
},
110110
"range": {
111-
"startLineNumber": 11,
111+
"startLineNumber": 13,
112112
"startColumn": 3,
113113
"endLineNumber": 4,
114114
"endColumn": 4
@@ -126,7 +126,7 @@
126126
[
127127
{
128128
"originSelectionRange": {
129-
"startLineNumber": -8,
129+
"startLineNumber": -10,
130130
"startColumn": 4,
131131
"endLineNumber": 0,
132132
"endColumn": 13
@@ -180,13 +180,13 @@
180180
"range": {
181181
"startLineNumber": 0,
182182
"startColumn": 3,
183-
"endLineNumber": 5,
183+
"endLineNumber": 7,
184184
"endColumn": 4
185185
},
186186
"targetSelectionRange": {
187187
"startLineNumber": 0,
188188
"startColumn": 3,
189-
"endLineNumber": 5,
189+
"endLineNumber": 7,
190190
"endColumn": 4
191191
},
192192
"filename": "fixtures/DefinitionReferenceProvider.tmLanguage.json"
@@ -204,14 +204,14 @@
204204
"range": {
205205
"startLineNumber": 0,
206206
"startColumn": 5,
207-
"endLineNumber": 0,
208-
"endColumn": 16
207+
"endLineNumber": 2,
208+
"endColumn": 6
209209
},
210210
"targetSelectionRange": {
211211
"startLineNumber": 0,
212212
"startColumn": 5,
213-
"endLineNumber": 0,
214-
"endColumn": 16
213+
"endLineNumber": 2,
214+
"endColumn": 6
215215
},
216216
"filename": "fixtures/DefinitionReferenceProvider.tmLanguage.json"
217217
}
@@ -228,22 +228,24 @@
228228
"range": {
229229
"startLineNumber": 0,
230230
"startColumn": 5,
231-
"endLineNumber": 0,
232-
"endColumn": 16
231+
"endLineNumber": 2,
232+
"endColumn": 6
233233
},
234234
"targetSelectionRange": {
235235
"startLineNumber": 0,
236236
"startColumn": 5,
237-
"endLineNumber": 0,
238-
"endColumn": 16
237+
"endLineNumber": 2,
238+
"endColumn": 6
239239
},
240240
"filename": "fixtures/DefinitionReferenceProvider.tmLanguage.json"
241241
}
242242
],
243+
[],
244+
[],
243245
[
244246
{
245247
"originSelectionRange": {
246-
"startLineNumber": 3,
248+
"startLineNumber": 5,
247249
"startColumn": 4,
248250
"endLineNumber": 0,
249251
"endColumn": 11

src/test/baselines/RenameProvider.json

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@
148148
"textEdit": {
149149
"text": "gnirts",
150150
"range": {
151-
"startLineNumber": 17,
151+
"startLineNumber": 19,
152152
"startColumn": 4,
153153
"endLineNumber": 0,
154154
"endColumn": 10
@@ -161,7 +161,7 @@
161161
{
162162
"renamePrepare": {
163163
"range": {
164-
"startLineNumber": -16,
164+
"startLineNumber": -18,
165165
"startColumn": 18,
166166
"endLineNumber": 0,
167167
"endColumn": 25
@@ -185,7 +185,7 @@
185185
"textEdit": {
186186
"text": "naeloob",
187187
"range": {
188-
"startLineNumber": 11,
188+
"startLineNumber": 13,
189189
"startColumn": 4,
190190
"endLineNumber": 0,
191191
"endColumn": 11
@@ -198,7 +198,7 @@
198198
{
199199
"renamePrepare": {
200200
"range": {
201-
"startLineNumber": -8,
201+
"startLineNumber": -10,
202202
"startColumn": 4,
203203
"endLineNumber": 0,
204204
"endColumn": 13
@@ -419,7 +419,32 @@
419419
{
420420
"renamePrepare": {
421421
"range": {
422-
"startLineNumber": 5,
422+
"startLineNumber": 3,
423+
"startColumn": 18,
424+
"endLineNumber": 0,
425+
"endColumn": 25
426+
},
427+
"text": "postfix"
428+
},
429+
"workspaceEdits": [
430+
{
431+
"textEdit": {
432+
"text": "xiftsop",
433+
"range": {
434+
"startLineNumber": 0,
435+
"startColumn": 18,
436+
"endLineNumber": 0,
437+
"endColumn": 25
438+
}
439+
},
440+
"filename": "fixtures/DefinitionReferenceProvider.tmLanguage.json"
441+
}
442+
]
443+
},
444+
{
445+
"renamePrepare": {
446+
"range": {
447+
"startLineNumber": 4,
423448
"startColumn": 4,
424449
"endLineNumber": 0,
425450
"endColumn": 11
@@ -443,7 +468,7 @@
443468
"textEdit": {
444469
"text": "naeloob",
445470
"range": {
446-
"startLineNumber": -11,
471+
"startLineNumber": -13,
447472
"startColumn": 18,
448473
"endLineNumber": 0,
449474
"endColumn": 25
@@ -456,7 +481,7 @@
456481
{
457482
"renamePrepare": {
458483
"range": {
459-
"startLineNumber": 14,
484+
"startLineNumber": 16,
460485
"startColumn": 13,
461486
"endLineNumber": 0,
462487
"endColumn": 44
@@ -505,7 +530,7 @@
505530
"textEdit": {
506531
"text": "gnirts",
507532
"range": {
508-
"startLineNumber": -17,
533+
"startLineNumber": -19,
509534
"startColumn": 18,
510535
"endLineNumber": 0,
511536
"endColumn": 24
@@ -518,7 +543,7 @@
518543
{
519544
"renamePrepare": {
520545
"range": {
521-
"startLineNumber": 21,
546+
"startLineNumber": 23,
522547
"startColumn": 39,
523548
"endLineNumber": 0,
524549
"endColumn": 85
@@ -642,7 +667,7 @@
642667
"textEdit": {
643668
"text": "LogicalBinary",
644669
"range": {
645-
"startLineNumber": -11,
670+
"startLineNumber": -13,
646671
"startColumn": 18,
647672
"endLineNumber": 0,
648673
"endColumn": 25

src/test/fixtures/DefinitionReferenceProvider.tmLanguage.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
"nest": {
1414
"include": "#nest",
1515
"repository": {
16-
"nest": { }
16+
"nest": {
17+
"name": "no.postfix"
18+
}
1719
}
1820
},
1921
"boolean": {

src/test/suite/extension.test.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ suite('Extension Tests', async () => {
509509
const editor = await vscode.window.showTextDocument(uri, showTextDocumentOptions);
510510

511511
type RenamePrepare = /* vscode.Range | */ {
512-
range: vscode.Range;
512+
range: IRange;
513513
text: string;
514514
};
515515
interface WorkspaceEdit {
@@ -528,6 +528,7 @@ suite('Extension Tests', async () => {
528528
text: string;
529529
// eol?: model.EndOfLineSequence;
530530
}
531+
/* One indexed */
531532
interface IRange {
532533
readonly startLineNumber: number;
533534
readonly startColumn: number;
@@ -553,18 +554,16 @@ suite('Extension Tests', async () => {
553554
const position = typeof positionOrLine == 'number' ? new vscode.Position(positionOrLine, character!) : positionOrLine;
554555
const renamePrepare = await tryCatchAsync(vscode.commands.executeCommand('_executePrepareRename', uri, position)) as RenamePrepare | undefined;
555556
if (typeof character == 'number') {
556-
assert.ok(renamePrepare);
557+
assert.ok(renamePrepare, `Rename assertion fail at ${uri.fsPath}:${position.line + 1}:${position.character}${newName ? ` newName: '${newName}'` : ''}`);
557558
}
558-
else {
559-
if (!renamePrepare) {
560-
return;
561-
}
559+
else if (!renamePrepare) {
560+
return;
562561
}
563562

564563
if (!renamePrepare.text) {
565-
console.log(JSON.stringify(renamePrepare));
564+
console.warn("Empty Rename:", JSON.stringify(position), JSON.stringify(renamePrepare));
566565
}
567-
newName = newName || renamePrepare.text.split('').reverse().join('');
566+
newName ||= renamePrepare.text.split('').reverse().join('');
568567
const workspaceEdit = await vscode.commands.executeCommand('_executeDocumentRenameProvider', uri, position, newName) as WorkspaceEdit;
569568
const workspaceEdits = workspaceEdit.edits;
570569

@@ -588,7 +587,7 @@ suite('Extension Tests', async () => {
588587

589588
await assertStrings(editor, assertRename);
590589

591-
await assertRename(18, 7, "LogicalBinary");
590+
await assertRename(20, 7, "LogicalBinary");
592591

593592
await assertBaseline(renamesActual, 'RenameProvider.json');
594593

@@ -629,7 +628,7 @@ suite('Extension Tests', async () => {
629628

630629
await assertStrings(editor, assertDefinition);
631630

632-
await assertDefinition(21, 31);
631+
await assertDefinition(23, 31);
633632

634633
await assertBaseline(definitionsActual, 'DefinitionReferenceProvider.json');
635634
});

0 commit comments

Comments
 (0)