Adds support for setting engine options from code settings.
This commit is contained in:
parent
b94ed45d9e
commit
ac841d81db
166
package.json
166
package.json
|
@ -43,6 +43,170 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"angelscript-languageserver.engine-settings": {
|
||||
"scope": "window",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"asEP_ALLOW_UNSAFE_REFERENCES": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_OPTIMIZE_BYTECODE": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
},
|
||||
"asEP_COPY_SCRIPT_SECTIONS": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
},
|
||||
"asEP_MAX_STACK_SIZE ": {
|
||||
"type": "integer",
|
||||
"default": 0
|
||||
},
|
||||
"asEP_USE_CHARACTER_LITERALS": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_ALLOW_MULTILINE_STRINGS ": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_ALLOW_IMPLICIT_HANDLE_TYPES": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_BUILD_WITHOUT_LINE_CUES": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_INIT_GLOBAL_VARS_AFTER_BUILD": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
},
|
||||
"asEP_REQUIRE_ENUM_SCOPE": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
},
|
||||
"asEP_SCRIPT_SCANNER": {
|
||||
"type": "integer",
|
||||
"default": 1,
|
||||
"enum": [
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
"asEP_INCLUDE_JIT_INSTRUCTIONS": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_STRING_ENCODING": {
|
||||
"type": "integer",
|
||||
"default": 0,
|
||||
"enum": [
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
"asEP_PROPERTY_ACCESSOR_MODE": {
|
||||
"type": "integer",
|
||||
"default": 3,
|
||||
"enum": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3
|
||||
]
|
||||
},
|
||||
"asEP_EXPAND_DEF_ARRAY_TO_TMPL": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_AUTO_GARBAGE_COLLECT": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
},
|
||||
"asEP_DISALLOW_GLOBAL_VARS": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_ALWAYS_IMPL_DEFAULT_CONSTRUCT": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_COMPILER_WARNINGS": {
|
||||
"type": "integer",
|
||||
"default": 1,
|
||||
"enum": [
|
||||
0,
|
||||
1,
|
||||
2
|
||||
]
|
||||
},
|
||||
"asEP_DISALLOW_VALUE_ASSIGN_FOR_REF_TYPE": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_ALTER_SYNTAX_NAMED_ARGS": {
|
||||
"type": "integer",
|
||||
"default": 0,
|
||||
"enum": [
|
||||
0,
|
||||
1,
|
||||
2
|
||||
]
|
||||
},
|
||||
"asEP_DISABLE_INTEGER_DIVISION": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_DISALLOW_EMPTY_LIST_ELEMENTS": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_PRIVATE_PROP_AS_PROTECTED": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_ALLOW_UNICODE_IDENTIFIERS": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"asEP_HEREDOC_TRIM_MODE": {
|
||||
"type": "integer",
|
||||
"default": 1,
|
||||
"enum": [
|
||||
0,
|
||||
1,
|
||||
2
|
||||
]
|
||||
},
|
||||
"asEP_MAX_NESTED_CALLS": {
|
||||
"type": "integer",
|
||||
"default": 100
|
||||
},
|
||||
"asEP_GENERIC_CALL_MODE": {
|
||||
"type": "integer",
|
||||
"default": 1,
|
||||
"enum": [
|
||||
0,
|
||||
1
|
||||
]
|
||||
},
|
||||
"asEP_INIT_STACK_SIZE": {
|
||||
"type": "integer",
|
||||
"default": 4096
|
||||
},
|
||||
"asEP_INIT_CALL_STACK_SIZE ": {
|
||||
"type": "integer",
|
||||
"default": 10
|
||||
},
|
||||
"asEP_MAX_CALL_STACK_SIZE": {
|
||||
"type": "integer",
|
||||
"default": 0
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -90,4 +254,4 @@
|
|||
"@typescript-eslint/parser": "^2.3.0",
|
||||
"typescript": "^4.0.2"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -116,6 +116,17 @@ connection.onInitialized(() => {
|
|||
}
|
||||
});
|
||||
|
||||
connection.workspace.getConfiguration('angelscript-languageserver.engine-settings').then((config) => {
|
||||
for (const key in config) {
|
||||
if (Object.prototype.hasOwnProperty.call(config, key)) {
|
||||
const element = config[key];
|
||||
let keyValue : NativeWrapper.ASEngineProperty = NativeWrapper.ASEngineProperty[key as keyof typeof NativeWrapper.ASEngineProperty];
|
||||
database.setEngineProperty(keyValue, element);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
connection.workspace.getWorkspaceFolders().then((ws) => {
|
||||
ws?.forEach(element => {
|
||||
registerFiles(element.uri.substr(7))
|
||||
|
|
|
@ -6,13 +6,12 @@
|
|||
#include "ASTypeDefParser/Parser.hpp"
|
||||
|
||||
Napi::Object Database::Init(Napi::Env env, Napi::Object exports) {
|
||||
Napi::Function func =
|
||||
DefineClass(env, "Database",
|
||||
{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)});
|
||||
Napi::Function func = DefineClass(
|
||||
env, "Database",
|
||||
{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();
|
||||
*constructor = Napi::Persistent(func);
|
||||
|
@ -30,14 +29,9 @@ void Database::SetupEngine() {
|
|||
_engine = asCreateScriptEngine();
|
||||
_builder = {};
|
||||
_engine->SetMessageCallback(asMETHOD(Database, MessageCallback), this, asCALL_THISCALL);
|
||||
_engine->SetEngineProperty(asEP_DISALLOW_EMPTY_LIST_ELEMENTS, true);
|
||||
_engine->SetEngineProperty(asEP_DISALLOW_VALUE_ASSIGN_FOR_REF_TYPE, false);
|
||||
_engine->SetEngineProperty(asEP_ALLOW_UNSAFE_REFERENCES, true);
|
||||
_engine->SetEngineProperty(asEP_ALWAYS_IMPL_DEFAULT_CONSTRUCT, true);
|
||||
_engine->SetEngineProperty(asEP_AUTO_GARBAGE_COLLECT, false);
|
||||
_engine->SetEngineProperty(asEP_REQUIRE_ENUM_SCOPE, true);
|
||||
_engine->SetEngineProperty(asEP_PROPERTY_ACCESSOR_MODE, 2);
|
||||
_engine->SetEngineProperty(asEP_COMPILER_WARNINGS, 2);
|
||||
for (auto& prop : _engineProperties) {
|
||||
_engine->SetEngineProperty(prop.first, prop.second);
|
||||
}
|
||||
for (auto& flag : _defines) {
|
||||
_builder.DefineWord(flag.c_str());
|
||||
}
|
||||
|
@ -46,20 +40,22 @@ void Database::SetupEngine() {
|
|||
_builder.StartNewModule(_engine, "Module");
|
||||
}
|
||||
|
||||
Database::Database(const Napi::CallbackInfo& info) : ObjectWrap(info) {
|
||||
Reset(info);
|
||||
}
|
||||
Database::Database(const Napi::CallbackInfo& info) : ObjectWrap(info) { Reset(info); }
|
||||
|
||||
void Database::SetEngineProperty(const Napi::CallbackInfo& info) {
|
||||
auto property = info[0].As<Napi::Number>().Int32Value();
|
||||
auto value = info[1].As<Napi::Number>().Int32Value();
|
||||
|
||||
_engine->SetEngineProperty(static_cast<asEEngineProp>(property), value);
|
||||
if (info[1].IsBoolean()) {
|
||||
auto value = info[1].As<Napi::Boolean>().Value();
|
||||
_engineProperties[(asEEngineProp)property] = value;
|
||||
} else {
|
||||
auto value = info[1].As<Napi::Number>().Int32Value();
|
||||
_engineProperties[(asEEngineProp)property] = value;
|
||||
}
|
||||
}
|
||||
|
||||
void Database::Reset(const Napi::CallbackInfo&) {
|
||||
std::lock_guard<std::mutex> lck(_lock);
|
||||
if (_engine != nullptr){
|
||||
if (_engine != nullptr) {
|
||||
_engine->DiscardModule("Module");
|
||||
_engine->Release();
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ private:
|
|||
CScriptBuilder _builder;
|
||||
ASTypeDefParser::TypeDefResult _result;
|
||||
std::vector<std::string> _defines;
|
||||
std::unordered_map<asEEngineProp, asPWORD> _engineProperties;
|
||||
std::vector<const Diagnostic*> _messages;
|
||||
std::mutex _lock;
|
||||
|
||||
|
|
Loading…
Reference in New Issue