mirror of
https://github.com/barsdeveloper/ueblueprint.git
synced 2026-02-13 16:44:49 +08:00
Fix invariant text and niagara types
This commit is contained in:
80
dist/ueblueprint.js
vendored
80
dist/ueblueprint.js
vendored
@@ -203,6 +203,7 @@ class Configuration {
|
||||
niagaraClipboardContent: "/Script/NiagaraEditor.NiagaraClipboardContent",
|
||||
niagaraDataInterfaceVolumeTexture: "/Script/Niagara.NiagaraDataInterfaceVolumeTexture",
|
||||
niagaraFloat: "/Script/Niagara.NiagaraFloat",
|
||||
NiagaraInt32: "/Script/Niagara.NiagaraInt32",
|
||||
niagaraMatrix: "/Script/Niagara.NiagaraMatrix",
|
||||
niagaraNodeFunctionCall: "/Script/NiagaraEditor.NiagaraNodeFunctionCall",
|
||||
niagaraNodeOp: "/Script/NiagaraEditor.NiagaraNodeOp",
|
||||
@@ -4155,6 +4156,7 @@ function nodeTitle(entity) {
|
||||
case Configuration.paths.variableSet:
|
||||
return "SET"
|
||||
}
|
||||
const className = entity.getClass();
|
||||
let switchTarget = entity.switchTarget();
|
||||
if (switchTarget) {
|
||||
if (switchTarget[0] !== "E") {
|
||||
@@ -4169,14 +4171,14 @@ function nodeTitle(entity) {
|
||||
if (keyNameSymbol) {
|
||||
const name = keyNameSymbol.toString();
|
||||
let title = keyName(name) ?? Utility.formatStringName(name);
|
||||
if (entity.getClass() === Configuration.paths.inputDebugKey) {
|
||||
if (className === Configuration.paths.inputDebugKey) {
|
||||
title = "Debug Key " + title;
|
||||
} else if (entity.getClass() === Configuration.paths.getInputAxisKeyValue) {
|
||||
} else if (className === Configuration.paths.getInputAxisKeyValue) {
|
||||
title = "Get " + title;
|
||||
}
|
||||
return title
|
||||
}
|
||||
if (entity.getClass() === Configuration.paths.macro) {
|
||||
if (className === Configuration.paths.macro) {
|
||||
return Utility.formatStringName(entity.MacroGraphReference?.getMacroName())
|
||||
}
|
||||
if (entity.isMaterial() && entity.getMaterialSubobject()) {
|
||||
@@ -4364,9 +4366,25 @@ function nodeTitle(entity) {
|
||||
case "Numeric::Add": return "+"
|
||||
case "Numeric::DistancePos": return "Distance"
|
||||
case "Numeric::Mul": return String.fromCharCode(0x2a2f)
|
||||
case "Integer::BitLShift": return "Bitwise Left Shift"
|
||||
case "Integer::BitAnd": return "Bitwise AND"
|
||||
case "Integer::BitNot": return "Bitwise NOT"
|
||||
case "Integer::BitOr": return "Bitwise OR"
|
||||
case "Integer::BitRShift": return "Bitwise Right Shift"
|
||||
case "Integer::BitXOr": return "Bitwise XOR"
|
||||
// case "Integer::BitOr": return "Bitwise OR"
|
||||
// case "Integer::BitOr": return "Bitwise OR"
|
||||
}
|
||||
return Utility.formatStringName(entity.OpName.toString()).replaceAll("::", " ")
|
||||
}
|
||||
let prefix;
|
||||
if (
|
||||
className.startsWith(prefix = "/Script/NiagaraEditor.NiagaraNodeParameter")
|
||||
|| className.startsWith(prefix = "/Script/NiagaraEditor.NiagaraNode"
|
||||
|
||||
)) {
|
||||
return Utility.formatStringName(className.substring(prefix.length))
|
||||
}
|
||||
if (entity.FunctionDisplayName) {
|
||||
return Utility.formatStringName(entity.FunctionDisplayName.toString())
|
||||
}
|
||||
@@ -4645,24 +4663,12 @@ class NaturalNumberEntity extends IntegerEntity {
|
||||
}
|
||||
|
||||
const colors = {
|
||||
[Configuration.paths.niagaraBool]: i$3`146, 0, 0`,
|
||||
[Configuration.paths.niagaraDataInterfaceVolumeTexture]: i$3`0, 168, 242`,
|
||||
[Configuration.paths.niagaraFloat]: i$3`160, 250, 68`,
|
||||
[Configuration.paths.niagaraMatrix]: i$3`0, 88, 200`,
|
||||
[Configuration.paths.niagaraNumeric]: i$3`0, 88, 200`,
|
||||
[Configuration.paths.niagaraPosition]: i$3`251, 146, 251`,
|
||||
[Configuration.paths.quat4f]: i$3`0, 88, 200`,
|
||||
[Configuration.paths.rotator]: i$3`157, 177, 251`,
|
||||
[Configuration.paths.transform]: i$3`227, 103, 0`,
|
||||
[Configuration.paths.vector]: i$3`251, 198, 34`,
|
||||
[Configuration.paths.vector3f]: i$3`250, 200, 36`,
|
||||
[Configuration.paths.vector4f]: i$3`0, 88, 200`,
|
||||
"Any": i$3`132, 132, 132`,
|
||||
"Any[]": i$3`132, 132, 132`,
|
||||
"audio": i$3`252, 148, 252`,
|
||||
"blue": i$3`0, 0, 255`,
|
||||
"bool": i$3`146, 0, 0`,
|
||||
"byte": i$3`0, 109, 99`,
|
||||
"byte": i$3`0, 110, 100`,
|
||||
"class": i$3`88, 0, 186`,
|
||||
"default": i$3`255, 255, 255`,
|
||||
"delegate": i$3`255, 56, 56`,
|
||||
@@ -4670,16 +4676,16 @@ const colors = {
|
||||
"exec": i$3`240, 240, 240`,
|
||||
"float": i$3`160, 252, 70`,
|
||||
"green": i$3`0, 255, 0`,
|
||||
"int": i$3`31, 224, 172`,
|
||||
"int": i$3`30, 224, 172`,
|
||||
"int32": i$3`30, 224, 172`,
|
||||
"int64": i$3`169, 223, 172`,
|
||||
"int64": i$3`170, 224, 172`,
|
||||
"interface": i$3`238, 252, 168`,
|
||||
"name": i$3`201, 128, 251`,
|
||||
"name": i$3`200, 128, 252`,
|
||||
"object": i$3`0, 168, 242`,
|
||||
"Param": i$3`255, 166, 39`,
|
||||
"Param[]": i$3`255, 166, 39`,
|
||||
"Point": i$3`63, 137, 255`,
|
||||
"Point[]": i$3`63, 137, 255`,
|
||||
"Param": i$3`255, 166, 40`,
|
||||
"Param[]": i$3`255, 166, 40`,
|
||||
"Point": i$3`64, 138, 255`,
|
||||
"Point[]": i$3`64, 137, 255`,
|
||||
"real": i$3`54, 208, 0`,
|
||||
"red": i$3`255, 0, 0`,
|
||||
"string": i$3`251, 0, 208`,
|
||||
@@ -4691,6 +4697,19 @@ const colors = {
|
||||
"Volume": i$3`230, 69, 188`,
|
||||
"Volume[]": i$3`230, 69, 188`,
|
||||
"wildcard": i$3`128, 120, 120`,
|
||||
[Configuration.paths.niagaraBool]: i$3`146, 0, 0`,
|
||||
[Configuration.paths.niagaraDataInterfaceVolumeTexture]: i$3`0, 168, 242`,
|
||||
[Configuration.paths.niagaraFloat]: i$3`160, 250, 68`,
|
||||
[Configuration.paths.NiagaraInt32]: i$3`30, 224, 172`,
|
||||
[Configuration.paths.niagaraMatrix]: i$3`0, 88, 200`,
|
||||
[Configuration.paths.niagaraNumeric]: i$3`0, 88, 200`,
|
||||
[Configuration.paths.niagaraPosition]: i$3`251, 146, 251`,
|
||||
[Configuration.paths.quat4f]: i$3`0, 88, 200`,
|
||||
[Configuration.paths.rotator]: i$3`157, 177, 251`,
|
||||
[Configuration.paths.transform]: i$3`227, 103, 0`,
|
||||
[Configuration.paths.vector]: i$3`251, 198, 34`,
|
||||
[Configuration.paths.vector3f]: i$3`250, 200, 36`,
|
||||
[Configuration.paths.vector4f]: i$3`0, 88, 200`,
|
||||
};
|
||||
|
||||
const pinColorMaterial = i$3`120, 120, 120`;
|
||||
@@ -4721,6 +4740,7 @@ function pinTitle(entity) {
|
||||
return match[1] // In case they match, then keep the case of the PinToolTip
|
||||
}
|
||||
}
|
||||
result = result.replace(/^Module\./, "");
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -4899,20 +4919,24 @@ class InvariantTextEntity extends IEntity {
|
||||
Parsernostrum.reg(new RegExp(`${this.lookbehind}\\s*\\(`)),
|
||||
Parsernostrum.doubleQuotedString,
|
||||
Parsernostrum.reg(/\s*\)/)
|
||||
).map(([_0, value, _2]) => Number(value)),
|
||||
Parsernostrum.reg(new RegExp(this.lookbehind)).map(() => 0) // InvariantTextEntity can not have arguments
|
||||
).map(([_0, value, _2]) => value),
|
||||
Parsernostrum.reg(new RegExp(this.lookbehind)).map(() => "") // InvariantTextEntity can have no arguments
|
||||
)
|
||||
.map(value => new this(value))
|
||||
.label("InvariantTextEntity")
|
||||
}
|
||||
|
||||
doSerialize() {
|
||||
return this.lookbehind + "(" + this.value + ")"
|
||||
return this.lookbehind + '("' + this.value + '")'
|
||||
}
|
||||
|
||||
valueOf() {
|
||||
return this.value
|
||||
}
|
||||
|
||||
toString() {
|
||||
return this.value
|
||||
}
|
||||
}
|
||||
|
||||
class LocalizedTextEntity extends IEntity {
|
||||
@@ -5580,6 +5604,7 @@ class PinEntity extends IEntity {
|
||||
"real": NumberEntity,
|
||||
"string": StringEntity,
|
||||
[Configuration.paths.linearColor]: LinearColorEntity,
|
||||
[Configuration.paths.niagaraBool]: BooleanEntity,
|
||||
[Configuration.paths.niagaraPosition]: VectorEntity,
|
||||
[Configuration.paths.rotator]: RotatorEntity,
|
||||
[Configuration.paths.vector]: VectorEntity,
|
||||
@@ -11713,7 +11738,7 @@ class BoolPinTemplate extends PinTemplate {
|
||||
#input
|
||||
|
||||
#onChangeHandler = () => {
|
||||
const entity = this.element.getDefaultValue();
|
||||
const entity = this.element.getDefaultValue(true);
|
||||
entity.value = this.#input.checked;
|
||||
this.element.setDefaultValue(entity);
|
||||
}
|
||||
@@ -12773,6 +12798,7 @@ const inputPinTemplates = {
|
||||
"string": StringPinTemplate,
|
||||
[Configuration.paths.linearColor]: LinearColorPinTemplate,
|
||||
[Configuration.paths.niagaraBool]: BoolPinTemplate,
|
||||
[Configuration.paths.NiagaraInt32]: IntPinTemplate,
|
||||
[Configuration.paths.niagaraPosition]: VectorPinTemplate,
|
||||
[Configuration.paths.rotator]: RotatorPinTemplate,
|
||||
[Configuration.paths.vector]: VectorPinTemplate,
|
||||
|
||||
4
dist/ueblueprint.min.js
vendored
4
dist/ueblueprint.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -179,6 +179,7 @@ export default class Configuration {
|
||||
niagaraClipboardContent: "/Script/NiagaraEditor.NiagaraClipboardContent",
|
||||
niagaraDataInterfaceVolumeTexture: "/Script/Niagara.NiagaraDataInterfaceVolumeTexture",
|
||||
niagaraFloat: "/Script/Niagara.NiagaraFloat",
|
||||
NiagaraInt32: "/Script/Niagara.NiagaraInt32",
|
||||
niagaraMatrix: "/Script/Niagara.NiagaraMatrix",
|
||||
niagaraNodeFunctionCall: "/Script/NiagaraEditor.NiagaraNodeFunctionCall",
|
||||
niagaraNodeOp: "/Script/NiagaraEditor.NiagaraNodeOp",
|
||||
|
||||
@@ -207,6 +207,7 @@ export default function nodeTitle(entity) {
|
||||
case Configuration.paths.variableSet:
|
||||
return "SET"
|
||||
}
|
||||
const className = entity.getClass()
|
||||
let switchTarget = entity.switchTarget()
|
||||
if (switchTarget) {
|
||||
if (switchTarget[0] !== "E") {
|
||||
@@ -221,14 +222,14 @@ export default function nodeTitle(entity) {
|
||||
if (keyNameSymbol) {
|
||||
const name = keyNameSymbol.toString()
|
||||
let title = keyName(name) ?? Utility.formatStringName(name)
|
||||
if (entity.getClass() === Configuration.paths.inputDebugKey) {
|
||||
if (className === Configuration.paths.inputDebugKey) {
|
||||
title = "Debug Key " + title
|
||||
} else if (entity.getClass() === Configuration.paths.getInputAxisKeyValue) {
|
||||
} else if (className === Configuration.paths.getInputAxisKeyValue) {
|
||||
title = "Get " + title
|
||||
}
|
||||
return title
|
||||
}
|
||||
if (entity.getClass() === Configuration.paths.macro) {
|
||||
if (className === Configuration.paths.macro) {
|
||||
return Utility.formatStringName(entity.MacroGraphReference?.getMacroName())
|
||||
}
|
||||
if (entity.isMaterial() && entity.getMaterialSubobject()) {
|
||||
@@ -416,9 +417,25 @@ export default function nodeTitle(entity) {
|
||||
case "Numeric::Add": return "+"
|
||||
case "Numeric::DistancePos": return "Distance"
|
||||
case "Numeric::Mul": return String.fromCharCode(0x2a2f)
|
||||
case "Integer::BitLShift": return "Bitwise Left Shift"
|
||||
case "Integer::BitAnd": return "Bitwise AND"
|
||||
case "Integer::BitNot": return "Bitwise NOT"
|
||||
case "Integer::BitOr": return "Bitwise OR"
|
||||
case "Integer::BitRShift": return "Bitwise Right Shift"
|
||||
case "Integer::BitXOr": return "Bitwise XOR"
|
||||
// case "Integer::BitOr": return "Bitwise OR"
|
||||
// case "Integer::BitOr": return "Bitwise OR"
|
||||
}
|
||||
return Utility.formatStringName(entity.OpName.toString()).replaceAll("::", " ")
|
||||
}
|
||||
let prefix
|
||||
if (
|
||||
className.startsWith(prefix = "/Script/NiagaraEditor.NiagaraNodeParameter")
|
||||
|| className.startsWith(prefix = "/Script/NiagaraEditor.NiagaraNode"
|
||||
|
||||
)) {
|
||||
return Utility.formatStringName(className.substring(prefix.length))
|
||||
}
|
||||
if (entity.FunctionDisplayName) {
|
||||
return Utility.formatStringName(entity.FunctionDisplayName.toString())
|
||||
}
|
||||
|
||||
@@ -2,24 +2,12 @@ import { css } from "lit"
|
||||
import Configuration from "../Configuration.js"
|
||||
|
||||
const colors = {
|
||||
[Configuration.paths.niagaraBool]: css`146, 0, 0`,
|
||||
[Configuration.paths.niagaraDataInterfaceVolumeTexture]: css`0, 168, 242`,
|
||||
[Configuration.paths.niagaraFloat]: css`160, 250, 68`,
|
||||
[Configuration.paths.niagaraMatrix]: css`0, 88, 200`,
|
||||
[Configuration.paths.niagaraNumeric]: css`0, 88, 200`,
|
||||
[Configuration.paths.niagaraPosition]: css`251, 146, 251`,
|
||||
[Configuration.paths.quat4f]: css`0, 88, 200`,
|
||||
[Configuration.paths.rotator]: css`157, 177, 251`,
|
||||
[Configuration.paths.transform]: css`227, 103, 0`,
|
||||
[Configuration.paths.vector]: css`251, 198, 34`,
|
||||
[Configuration.paths.vector3f]: css`250, 200, 36`,
|
||||
[Configuration.paths.vector4f]: css`0, 88, 200`,
|
||||
"Any": css`132, 132, 132`,
|
||||
"Any[]": css`132, 132, 132`,
|
||||
"audio": css`252, 148, 252`,
|
||||
"blue": css`0, 0, 255`,
|
||||
"bool": css`146, 0, 0`,
|
||||
"byte": css`0, 109, 99`,
|
||||
"byte": css`0, 110, 100`,
|
||||
"class": css`88, 0, 186`,
|
||||
"default": css`255, 255, 255`,
|
||||
"delegate": css`255, 56, 56`,
|
||||
@@ -27,16 +15,16 @@ const colors = {
|
||||
"exec": css`240, 240, 240`,
|
||||
"float": css`160, 252, 70`,
|
||||
"green": css`0, 255, 0`,
|
||||
"int": css`31, 224, 172`,
|
||||
"int": css`30, 224, 172`,
|
||||
"int32": css`30, 224, 172`,
|
||||
"int64": css`169, 223, 172`,
|
||||
"int64": css`170, 224, 172`,
|
||||
"interface": css`238, 252, 168`,
|
||||
"name": css`201, 128, 251`,
|
||||
"name": css`200, 128, 252`,
|
||||
"object": css`0, 168, 242`,
|
||||
"Param": css`255, 166, 39`,
|
||||
"Param[]": css`255, 166, 39`,
|
||||
"Point": css`63, 137, 255`,
|
||||
"Point[]": css`63, 137, 255`,
|
||||
"Param": css`255, 166, 40`,
|
||||
"Param[]": css`255, 166, 40`,
|
||||
"Point": css`64, 138, 255`,
|
||||
"Point[]": css`64, 137, 255`,
|
||||
"real": css`54, 208, 0`,
|
||||
"red": css`255, 0, 0`,
|
||||
"string": css`251, 0, 208`,
|
||||
@@ -48,6 +36,19 @@ const colors = {
|
||||
"Volume": css`230, 69, 188`,
|
||||
"Volume[]": css`230, 69, 188`,
|
||||
"wildcard": css`128, 120, 120`,
|
||||
[Configuration.paths.niagaraBool]: css`146, 0, 0`,
|
||||
[Configuration.paths.niagaraDataInterfaceVolumeTexture]: css`0, 168, 242`,
|
||||
[Configuration.paths.niagaraFloat]: css`160, 250, 68`,
|
||||
[Configuration.paths.NiagaraInt32]: css`30, 224, 172`,
|
||||
[Configuration.paths.niagaraMatrix]: css`0, 88, 200`,
|
||||
[Configuration.paths.niagaraNumeric]: css`0, 88, 200`,
|
||||
[Configuration.paths.niagaraPosition]: css`251, 146, 251`,
|
||||
[Configuration.paths.quat4f]: css`0, 88, 200`,
|
||||
[Configuration.paths.rotator]: css`157, 177, 251`,
|
||||
[Configuration.paths.transform]: css`227, 103, 0`,
|
||||
[Configuration.paths.vector]: css`251, 198, 34`,
|
||||
[Configuration.paths.vector3f]: css`250, 200, 36`,
|
||||
[Configuration.paths.vector4f]: css`0, 88, 200`,
|
||||
}
|
||||
|
||||
const pinColorMaterial = css`120, 120, 120`
|
||||
|
||||
@@ -28,6 +28,7 @@ const inputPinTemplates = {
|
||||
"string": StringPinTemplate,
|
||||
[Configuration.paths.linearColor]: LinearColorPinTemplate,
|
||||
[Configuration.paths.niagaraBool]: BoolPinTemplate,
|
||||
[Configuration.paths.NiagaraInt32]: IntPinTemplate,
|
||||
[Configuration.paths.niagaraPosition]: VectorPinTemplate,
|
||||
[Configuration.paths.rotator]: RotatorPinTemplate,
|
||||
[Configuration.paths.vector]: VectorPinTemplate,
|
||||
|
||||
@@ -11,5 +11,6 @@ export default function pinTitle(entity) {
|
||||
return match[1] // In case they match, then keep the case of the PinToolTip
|
||||
}
|
||||
}
|
||||
result = result.replace(/^Module\./, "")
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -19,18 +19,22 @@ export default class InvariantTextEntity extends IEntity {
|
||||
P.reg(new RegExp(`${this.lookbehind}\\s*\\(`)),
|
||||
P.doubleQuotedString,
|
||||
P.reg(/\s*\)/)
|
||||
).map(([_0, value, _2]) => Number(value)),
|
||||
P.reg(new RegExp(this.lookbehind)).map(() => 0) // InvariantTextEntity can not have arguments
|
||||
).map(([_0, value, _2]) => value),
|
||||
P.reg(new RegExp(this.lookbehind)).map(() => "") // InvariantTextEntity can have no arguments
|
||||
)
|
||||
.map(value => new this(value))
|
||||
.label("InvariantTextEntity")
|
||||
}
|
||||
|
||||
doSerialize() {
|
||||
return this.lookbehind + "(" + this.value + ")"
|
||||
return this.lookbehind + '("' + this.value + '")'
|
||||
}
|
||||
|
||||
valueOf() {
|
||||
return this.value
|
||||
}
|
||||
|
||||
toString() {
|
||||
return this.value
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ export default class PinEntity extends IEntity {
|
||||
"real": NumberEntity,
|
||||
"string": StringEntity,
|
||||
[Configuration.paths.linearColor]: LinearColorEntity,
|
||||
[Configuration.paths.niagaraBool]: BooleanEntity,
|
||||
[Configuration.paths.niagaraPosition]: VectorEntity,
|
||||
[Configuration.paths.rotator]: RotatorEntity,
|
||||
[Configuration.paths.vector]: VectorEntity,
|
||||
|
||||
@@ -10,7 +10,7 @@ export default class BoolPinTemplate extends PinTemplate {
|
||||
#input
|
||||
|
||||
#onChangeHandler = () => {
|
||||
const entity = this.element.getDefaultValue()
|
||||
const entity = this.element.getDefaultValue(true)
|
||||
entity.value = this.#input.checked
|
||||
this.element.setDefaultValue(entity)
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import GuidEntity from "../js/entity/GuidEntity.js"
|
||||
import IEntity from "../js/entity/IEntity.js"
|
||||
import Integer64Entity from "../js/entity/Integer64Entity.js"
|
||||
import IntegerEntity from "../js/entity/IntegerEntity.js"
|
||||
import InvariantTextEntity from "../js/entity/InvariantTextEntity.js"
|
||||
import KeyBindingEntity from "../js/entity/KeyBindingEntity.js"
|
||||
import LinearColorEntity from "../js/entity/LinearColorEntity.js"
|
||||
import MirroredEntity from "../js/entity/MirroredEntity.js"
|
||||
@@ -457,7 +458,7 @@ test("Integer64Entity", () => {
|
||||
})
|
||||
|
||||
test("IntegerEntity", () => {
|
||||
let grammar = IntegerEntity.grammar
|
||||
const grammar = IntegerEntity.grammar
|
||||
|
||||
let value = grammar.parse("0")
|
||||
expect(value).toBeInstanceOf(IntegerEntity)
|
||||
@@ -515,6 +516,19 @@ test("IntegerEntity", () => {
|
||||
expect(IntegerEntity.flagSerialized().grammar.parse("589").serialize()).toEqual(`"589"`)
|
||||
})
|
||||
|
||||
test("InvariantTextEntity", () => {
|
||||
const grammar = InvariantTextEntity.grammar
|
||||
|
||||
let value = grammar.parse('INVTEXT("NiagaraWildcard")')
|
||||
expect(value).toBeInstanceOf(InvariantTextEntity)
|
||||
expect(value).toEqual(new InvariantTextEntity("NiagaraWildcard"))
|
||||
expect(value.equals(new InvariantTextEntity("NiagaraWildcard"))).toBeTruthy()
|
||||
expect(value.equals(new InvariantTextEntity("Unrelated"))).toBeFalsy()
|
||||
expect(value.equals(new StringEntity("NiagaraWildcard"))).toBeFalsy()
|
||||
expect(value.toString()).toEqual("NiagaraWildcard")
|
||||
expect(value.serialize()).toEqual('INVTEXT("NiagaraWildcard")')
|
||||
})
|
||||
|
||||
test("KeyBindingEntity", () => {
|
||||
let grammar = KeyBindingEntity.grammar
|
||||
|
||||
|
||||
Reference in New Issue
Block a user