Adds support for setting custom defines in vscode settings.

This commit is contained in:
Deukhoofd 2021-10-24 12:08:34 +02:00
parent 220c6d0080
commit b94ed45d9e
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
5 changed files with 29 additions and 0 deletions

View File

@ -36,6 +36,13 @@
],
"default": "off",
"description": "Traces the communication between VS Code and the language server."
},
"angelscript-languageserver.defines": {
"scope": "window",
"type": "array",
"items": {
"type": "string"
}
}
}
},

View File

@ -108,6 +108,14 @@ connection.onInitialized(() => {
});
}
connection.workspace.getConfiguration('angelscript-languageserver.defines').then((config) => {
let defines = config as string[];
for (let index = 0; index < defines.length; index++) {
const define = defines[index];
database.addDefine(define);
}
});
connection.workspace.getWorkspaceFolders().then((ws) => {
ws?.forEach(element => {
registerFiles(element.uri.substr(7))

View File

@ -11,6 +11,7 @@ Napi::Object Database::Init(Napi::Env env, Napi::Object exports) {
{InstanceMethod("reset", &Database::Reset), InstanceMethod("loadTypeDef", &Database::LoadTypeDef),
InstanceMethod("loadScript", &Database::LoadScript), InstanceMethod("build", &Database::Build),
InstanceMethod("messages", &Database::GetMessages),
InstanceMethod("addDefine", &Database::AddDefine),
InstanceMethod("setEngineProperty", &Database::SetEngineProperty)});
auto* constructor = new Napi::FunctionReference();
@ -37,6 +38,9 @@ void Database::SetupEngine() {
_engine->SetEngineProperty(asEP_REQUIRE_ENUM_SCOPE, true);
_engine->SetEngineProperty(asEP_PROPERTY_ACCESSOR_MODE, 2);
_engine->SetEngineProperty(asEP_COMPILER_WARNINGS, 2);
for (auto& flag : _defines) {
_builder.DefineWord(flag.c_str());
}
RegisterStdString(_engine);
RegisterScriptArray(_engine, true);
_builder.StartNewModule(_engine, "Module");
@ -103,4 +107,11 @@ Napi::Value Database::GetMessages(const Napi::CallbackInfo& info) {
return messages;
}
void Database::AddDefine(const Napi::CallbackInfo& info) {
if (info.Length() < 1)
throw std::logic_error("Not enough arguments");
auto name = info[0].As<Napi::String>().Utf8Value();
_defines.emplace_back(name);
}
#endif

View File

@ -12,6 +12,7 @@ private:
asIScriptEngine* _engine = nullptr;
CScriptBuilder _builder;
ASTypeDefParser::TypeDefResult _result;
std::vector<std::string> _defines;
std::vector<const Diagnostic*> _messages;
std::mutex _lock;
@ -22,6 +23,7 @@ public:
static Napi::Object Init(Napi::Env env, Napi::Object exports);
explicit Database(const Napi::CallbackInfo& info);
void AddDefine(const Napi::CallbackInfo& info);
void SetEngineProperty(const Napi::CallbackInfo& info);
void Reset(const Napi::CallbackInfo& info);
void LoadScript(const Napi::CallbackInfo& info);

View File

@ -55,6 +55,7 @@ export interface ScriptDatabase {
loadScript(name: string, script: string): void;
build(): number;
messages(): Message[];
addDefine(define: string) : void;
}
export function BuildDatabase(): ScriptDatabase {