Skip to content

Commit 2c49915

Browse files
committed
fix the range problem in missing keyword actions
1 parent 5ed6090 commit 2c49915

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

src/ast.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { BraceExpression, CompileStatement, CompilerError, ExportStatement, Expr
22
import { CodeAction, CodeActionKind, Range } from 'lsp-types';
33
import { dictionary } from './dictionary/dictionary.js';
44
import levenshtein from 'js-levenshtein';
5+
import { subRange } from './diagnostic.js';
56

67
const caf = {
78
mk: (keyword: string, program: ProgramStatement, range: Range, filePath: string): CodeAction[] => {
@@ -17,7 +18,7 @@ const caf = {
1718
edit: {
1819
changes: {
1920
[filePath]: [{
20-
range,
21+
range:subRange(range),
2122
newText: word
2223
}]
2324
}
@@ -485,6 +486,13 @@ export namespace syxparser {
485486
else if (tt === TokenType.OpenSquare) return parseSquareExpression(put, defaultRange);
486487
else if (tt === TokenType.OpenParen) return parseParenExpression(put, defaultRange);
487488
else if (tt === TokenType.Identifier && at(1).type === TokenType.VarSeperator) return parsePrimitiveVariable(put);
489+
else if (keywords.includes(tt)) {
490+
if (!statements) throw new CompilerError(at().range, 'Statement not allowed here.', filePath);
491+
return parseStatement();
492+
} else if (tt === TokenType.Identifier && expectIdentifier) {
493+
const { value, range } = tokens.shift();
494+
return node({ type: NodeType.String, value, range }, put);
495+
}
488496
else throw new CompilerError(at().range, `Unexpected expression: '${at().value}'`, filePath);
489497

490498

src/diagnostic.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,15 @@ export function createSyntaxScriptDiagnosticReport(filePath: string, fileContent
4444
* Modifies the given range to be zero-based.
4545
* @param {Range} r Any range.
4646
* @returns Same range with every value decreased by 1.
47+
* @author efekos
48+
* @version 1.0.0
49+
* @since 0.0.1-alpha
4750
*/
48-
function subRange(r:Range):Range {
49-
return {start:{character:r.start.character-1,line:r.start.line-1},end:{character:r.end.character-1,line:r.end.line-1}};
51+
export function subRange(r:Range):Range {
52+
const a = r.start.character;
53+
const b = r.start.line;
54+
const c = r.end.character;
55+
const d = r.end.line;
56+
57+
return {start:{character:a===0?0:a-1,line:b===0?0:b-1},end:{character:c===0?0:c-1,line:d===0?0:d-1}};
5058
}

0 commit comments

Comments
 (0)