mirror of
https://github.com/godotengine/godot-vscode-plugin.git
synced 2026-01-03 01:48:11 +03:00
parse named enunmerations
This commit is contained in:
@@ -169,6 +169,8 @@ class Config {
|
||||
items = [...items, ...addScriptItems(script.variables, CompletionItemKind.Variable, "Variable")];
|
||||
items = [...items, ...addScriptItems(script.signals, CompletionItemKind.Interface, "Signal")];
|
||||
items = [...items, ...addScriptItems(script.constants, CompletionItemKind.Enum, "Constant")];
|
||||
if(script.enumerations)
|
||||
items = [...items, ...addScriptItems(script.enumerations, CompletionItemKind.Enum, "Enumeration")];
|
||||
}
|
||||
|
||||
const addSceneNodes = ()=>{
|
||||
|
||||
@@ -54,6 +54,8 @@ class GDScriptDefinitionProivder implements DefinitionProvider {
|
||||
scriptitems = [...scriptitems, ...checkDifinition(script.functions)];
|
||||
scriptitems = [...scriptitems, ...checkDifinition(script.signals)];
|
||||
scriptitems = [...scriptitems, ...checkDifinition(script.classes)];
|
||||
if(script.enumerations)
|
||||
scriptitems = [...scriptitems, ...checkDifinition(script.enumerations)];
|
||||
locations = [...locations, ...scriptitems];
|
||||
}
|
||||
// check from builtin
|
||||
|
||||
@@ -70,6 +70,8 @@ class GDScriptHoverProvider implements HoverProvider {
|
||||
scriptips = [...scriptips, ...getHoverText(script.functions, 'func', path)];
|
||||
scriptips = [...scriptips, ...getHoverText(script.signals, 'signal', path)];
|
||||
scriptips = [...scriptips, ...getHoverText(script.classes, 'class', path)];
|
||||
if(script.enumerations)
|
||||
scriptips = [...scriptips, ...getHoverText(script.enumerations, 'const', path)];
|
||||
tips = [...tips, ...scriptips];
|
||||
}
|
||||
};
|
||||
|
||||
@@ -13,7 +13,8 @@ interface GDScript {
|
||||
// symbol: marked string
|
||||
documents: {},
|
||||
// name : value
|
||||
constvalues: {}
|
||||
constvalues: {},
|
||||
enumerations: {}
|
||||
}
|
||||
|
||||
class GDScriptSymbolParser {
|
||||
@@ -31,7 +32,8 @@ class GDScriptSymbolParser {
|
||||
native: "Object",
|
||||
signatures: {},
|
||||
documents: {},
|
||||
constvalues: {}
|
||||
constvalues: {},
|
||||
enumerations: {}
|
||||
}
|
||||
const text = content;
|
||||
const lines = text.split(/\r?\n/);
|
||||
@@ -172,14 +174,39 @@ class GDScriptSymbolParser {
|
||||
script.constvalues[key] = match[2];
|
||||
}
|
||||
|
||||
let classnames = getMatches(/class\s+([_A-Za-z]+[_A-Za-z0-9]*)\s*extends\s+/, 1);
|
||||
const classes = findLineRanges(classnames, "class\\s+$X$\\s*extends\\s+");
|
||||
let classnames = getMatches(/class\s+([_A-Za-z]+[_A-Za-z0-9]*)(\s|\:)/, 1);
|
||||
const classes = findLineRanges(classnames, "class\\s+$X$(\\s|\\:)");
|
||||
for (let key of Object.keys(classes)) {
|
||||
const r:Range = determRange(key, classes)
|
||||
script.classes[key] = determRange(key, classes);
|
||||
script.classes[key] = r;
|
||||
script.documents[key] = parseDocument(r);
|
||||
}
|
||||
// console.log(script);
|
||||
|
||||
let enumnames = getMatches(/enum\s+([_A-Za-z]+[_A-Za-z0-9]*)\s+\{/, 1);
|
||||
const enums = findLineRanges(enumnames, "enum\\s+$X$\\s+\{");
|
||||
for (let key of Object.keys(enums)) {
|
||||
const r:Range = determRange(key, enums)
|
||||
script.constants[key] = r;
|
||||
script.documents[key] = parseDocument(r);
|
||||
|
||||
let curindex = r.start.line
|
||||
while (curindex < lines.length) {
|
||||
const line = lines[curindex];
|
||||
let matchs = line.match(/([_A-Za-z]+[_A-Za-z0-9]*)/g);
|
||||
if(matchs && matchs.length >= 1 ){
|
||||
for (var i = 0; i < matchs.length; i++)
|
||||
if(line.indexOf(matchs[i]) > line.indexOf("{"))
|
||||
script.enumerations[matchs[i]] = new Range(curindex, 0, curindex, line.length);
|
||||
}
|
||||
if(line.indexOf("}") == -1)
|
||||
curindex += 1;
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
// TODO: enumerations without name
|
||||
// const unnamedEnums = text.match(/enum\s+\{.*\}/gm)
|
||||
|
||||
|
||||
return script;
|
||||
}
|
||||
|
||||
@@ -48,6 +48,12 @@ class GDScriptSymbolProvider implements DocumentSymbolProvider {
|
||||
for (let key of Object.keys(classes))
|
||||
symbols.push(new SymbolInformation(key, SymbolKind.Class, classes[key]));
|
||||
|
||||
if(script.enumerations) {
|
||||
const enumerations = script.enumerations;
|
||||
for (let key of Object.keys(enumerations))
|
||||
symbols.push(new SymbolInformation(key, SymbolKind.Enum, enumerations[key]));
|
||||
}
|
||||
|
||||
return symbols;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,8 @@ class GDScriptWorkspaceSymbolProvider implements vscode.WorkspaceSymbolProvider
|
||||
queryMembers(query, scrip.variables, vscode.SymbolKind.Variable, path);
|
||||
queryMembers(query, scrip.constants, vscode.SymbolKind.Constant, path);
|
||||
queryMembers(query, scrip.classes, vscode.SymbolKind.Class, path);
|
||||
if(scrip.enumerations)
|
||||
queryMembers(query, scrip.enumerations, vscode.SymbolKind.Enum, path);
|
||||
}
|
||||
return symbols;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user