Skip to content

Commit a132922

Browse files
committed
temp: Optimized completions
1 parent 6852923 commit a132922

20 files changed

+47686
-30089
lines changed

server/src/completion/helpers.sync-conflict-20240928-165240-LCAQP67.ts

Lines changed: 0 additions & 128 deletions
This file was deleted.

server/src/completion/helpers.ts

Lines changed: 71 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { CandidatesCollection } from "antlr4-c3";
22
import { ParserRuleContext, TerminalNode, Token } from "antlr4ng";
33
import { MapIniParser } from "../utils/antlr4ng/MapIniParser";
4-
import { CompletionItem, CompletionItemKind } from "vscode-languageserver";
4+
import { CompletionItem, CompletionItemKind, InsertTextFormat } from "vscode-languageserver";
55
import * as list from '../utils/lists'
66
import { RBTree } from "bintrees";
77

88

9+
910
export function findTokenIndex(tokens: Token[], offset: number): number {
1011
for (let i = 0; i < tokens.length; i++) {
1112
const token = tokens[i];
@@ -29,16 +30,36 @@ export function generateCompletionItems(candidates: CandidatesCollection, parser
2930
}
3031

3132
// Clean up the token name
32-
const label = tokenName.startsWith("'") && tokenName.endsWith("'")
33+
let label = tokenName.startsWith("'") && tokenName.endsWith("'")
3334
? tokenName.substring(1, tokenName.length - 1)
3435
: tokenName;
3536

36-
completionItems.push({
37-
label,
38-
kind: CompletionItemKind.Field,
39-
data: tokenType,
40-
documentation: `Keyword: ${label}`,
41-
});
37+
switch(label) {
38+
39+
case 'NEWLINE':
40+
case 'COMMENT':
41+
break;
42+
43+
case 'Coords':
44+
completionItems.push({
45+
label,
46+
kind: CompletionItemKind.Snippet,
47+
insertTextFormat: InsertTextFormat.Snippet,
48+
detail: 'Insert Left, Top, Right & Bottom',
49+
insertText: 'Coords = Left:${1:0} Top:${2:0} Right:${3:0} Bottom:${0:0}',
50+
documentation: `Snippet: ${label}`
51+
})
52+
break;
53+
54+
default:
55+
completionItems.push({
56+
label,
57+
kind: CompletionItemKind.Field,
58+
data: tokenType,
59+
documentation: `Keyword: ${label}`,
60+
});
61+
break;
62+
}
4263
}
4364

4465
// Process rule candidates (snippets, templates)
@@ -63,8 +84,6 @@ export function findContextAtPosition(tree: ParserRuleContext, position: number)
6384

6485
console.log(`Start: ${tree.start.start}, End: ${tree.stop.stop}, Position: ${position}`)
6586

66-
position -= 1;
67-
6887
const start = tree.start.start;
6988
const stop = tree.stop.stop + 1;
7089

@@ -96,6 +115,33 @@ export function getContextSpecificCompletions(ruleName: string): CompletionItem[
96115

97116
//TODO: Add retrievels here
98117
switch (ruleName) {
118+
case 'cb_command_property':
119+
completionItems.push(...getCompletionItemsFromStringArray(list.CommandButtonCommandValues))
120+
break;
121+
122+
case 'cb_options_property':
123+
completionItems.push(...getCompletionItemsFromStringArray(list.CommandButtonOptionValues))
124+
break;
125+
126+
case 'cb_buttonbordertype_property':
127+
completionItems.push(...getCompletionItemsFromStringArray(list.CommandButtonBorderTypeValues))
128+
break;
129+
130+
case 'object_property':
131+
completionItems.push(...getCompletionItemsFromRBTree(list.objects))
132+
completionItems.push(...getCompletionItemsFromRBTree(list.customObjects))
133+
break;
134+
135+
case 'science_property':
136+
completionItems.push(...getCompletionItemsFromRBTree(list.science))
137+
completionItems.push(...getCompletionItemsFromRBTree(list.customScience))
138+
break;
139+
140+
case 'specialpower_property':
141+
completionItems.push(...getCompletionItemsFromRBTree(list.specialPower))
142+
completionItems.push(...getCompletionItemsFromRBTree(list.customSpecialPower))
143+
break;
144+
99145
case 'upgrade_property':
100146
// Add completion items relevant to function declarations
101147

@@ -127,5 +173,20 @@ function getCompletionItemsFromRBTree(tree: RBTree<string>): CompletionItem[] {
127173
});
128174
});
129175

176+
return completionItems;
177+
}
178+
179+
function getCompletionItemsFromStringArray(stringArray: string[]): CompletionItem[] {
180+
const completionItems: CompletionItem[] = [];
181+
182+
stringArray.forEach(string => {
183+
completionItems.push({
184+
label: string,
185+
kind: CompletionItemKind.Text,
186+
data: string,
187+
documentation: `Value: ${string}`,
188+
});
189+
});
190+
130191
return completionItems;
131192
}

server/src/diagnostic/diagnosticsVisitor.ts

Lines changed: 16 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,9 @@ export class DiagnosticVisitor extends AbstractParseTreeVisitor<void> implements
5858
}
5959

6060
if (ctx.commandbutton_value().ID()) {
61-
const symbol = ctx.commandbutton_value().ID().symbol
62-
const CB_text = ctx.commandbutton_value().ID().getText()
61+
const symbol = ctx.commandbutton_value().ID()!.symbol
62+
const CB_text = ctx.commandbutton_value().ID()!.getText()
63+
6364
if (!list.commandButtons.find(CB_text) && !list.customCommandButtons.find(CB_text)) {
6465
const severity = DiagnosticSeverity.Error
6566
const start = new Location(symbol.line, symbol.column)
@@ -183,21 +184,6 @@ export class DiagnosticVisitor extends AbstractParseTreeVisitor<void> implements
183184
// =====================================
184185
// =========== CLASS VALUES ============
185186
// =====================================
186-
visitFaction_value(ctx: Faction_valueContext): void {
187-
if (ctx.ID()) {
188-
const symbol = ctx.ID()!.symbol
189-
const ID_text = ctx.ID()!.getText()
190-
191-
if (!list.Faction.includes(ID_text) && !list.Faction.includes(ID_text)) {
192-
const severity = DiagnosticSeverity.Error
193-
const start = new Location(symbol.line, symbol.column)
194-
const msg = `Faction ${ID_text} does not exist`
195-
this.addDiagnostic(severity, start, start, msg)
196-
}
197-
}
198-
}
199-
200-
201187
visitFxlist_value(ctx: Fxlist_valueContext): void {
202188
if (ctx.ID()) {
203189
const symbol = ctx.ID()!.symbol
@@ -242,19 +228,19 @@ export class DiagnosticVisitor extends AbstractParseTreeVisitor<void> implements
242228
}
243229
}
244230

245-
visitAudioevent_value(ctx: Audioevent_valueContext): void {
246-
if (ctx.ID()) {
247-
const symbol = ctx.ID()!.symbol
248-
const ID_text = ctx.ID()!.getText()
249-
250-
if (!list.audioEvent.find(ID_text) && !list.customAudioEvent.find(ID_text)) {
251-
const severity = DiagnosticSeverity.Error
252-
const start = new Location(symbol.line, symbol.column)
253-
const msg = `AudioEvent ${ID_text} is not defined`
254-
this.addDiagnostic(severity, start, start, msg)
255-
}
256-
}
257-
}
231+
// visitAudioevent_value(ctx: Audioevent_valueContext): void {
232+
// if (ctx.ID()) {
233+
// const symbol = ctx.ID()!.symbol
234+
// const ID_text = ctx.ID()!.getText()
235+
236+
// if (!list.audioEvent.find(ID_text) && !list.customAudioEvent.find(ID_text)) {
237+
// const severity = DiagnosticSeverity.Error
238+
// const start = new Location(symbol.line, symbol.column)
239+
// const msg = `AudioEvent ${ID_text} is not defined`
240+
// this.addDiagnostic(severity, start, start, msg)
241+
// }
242+
// }
243+
// }
258244

259245

260246
visitScience_value(ctx: Science_valueContext): void {

server/src/server.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -228,12 +228,18 @@ connection.onCompletion((_textDocumentPosition: TextDocumentPositionParams): Com
228228

229229
// Find the token index at the cursor position
230230
const tokenIndex = findTokenIndex(tokenStream.getTokens(), offset);
231+
232+
const contextAtPosition = findContextAtPosition(tree, offset);
231233

232-
// Collect completion candidates
233-
core.showDebugOutput = false
234-
const candidates = core.collectCandidates(tokenIndex);
234+
let candidates = null;
235235

236-
const contextAtPosition = findContextAtPosition(tree, offset);
236+
// Collect completion candidates
237+
core.showDebugOutput = true
238+
if (contextAtPosition) {
239+
candidates = core.collectCandidates(tokenIndex, contextAtPosition);
240+
} else {
241+
candidates = core.collectCandidates(tokenIndex)
242+
}
237243

238244
console.log(`ContextAtPosition: ${parser.ruleNames[contextAtPosition!.ruleIndex]}`)
239245

0 commit comments

Comments
 (0)