parseHelper
-
- @Test
- def void loadModel() {
- val result = parseHelper.parse('''
- Hello Xtext!
- ''')
- Assertions.assertNotNull(result)
- val errors = result.eResource.errors
- Assertions.assertTrue(errors.isEmpty, '''Unexpected errors: «errors.join(", ")»''')
- }
-}
diff --git a/tools/eclipse/dev/org.riscv.idl.ui.tests/.classpath b/tools/eclipse/dev/org.riscv.idl.ui.tests/.classpath
deleted file mode 100644
index 8ee4cf1d89..0000000000
--- a/tools/eclipse/dev/org.riscv.idl.ui.tests/.classpath
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/eclipse/dev/org.riscv.idl.ui.tests/test-bin/org/riscv/idl/ui/tests/IdlUiInjectorProvider.class b/tools/eclipse/dev/org.riscv.idl.ui.tests/test-bin/org/riscv/idl/ui/tests/IdlUiInjectorProvider.class
deleted file mode 100644
index dfe7b80e39..0000000000
Binary files a/tools/eclipse/dev/org.riscv.idl.ui.tests/test-bin/org/riscv/idl/ui/tests/IdlUiInjectorProvider.class and /dev/null differ
diff --git a/tools/eclipse/dev/org.riscv.idl.ui/.classpath b/tools/eclipse/dev/org.riscv.idl.ui/.classpath
deleted file mode 100644
index 7994b69384..0000000000
--- a/tools/eclipse/dev/org.riscv.idl.ui/.classpath
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/tools/eclipse/dev/org.riscv.idl.ui/META-INF/MANIFEST.MF b/tools/eclipse/dev/org.riscv.idl.ui/META-INF/MANIFEST.MF
deleted file mode 100644
index 66ea90ce75..0000000000
--- a/tools/eclipse/dev/org.riscv.idl.ui/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,27 +0,0 @@
-Manifest-Version: 1.0
-Automatic-Module-Name: org.riscv.idl.ui
-Bundle-ManifestVersion: 2
-Bundle-Name: org.riscv.idl.ui
-Bundle-Vendor: My Company
-Bundle-Version: 1.0.0.qualifier
-Bundle-SymbolicName: org.riscv.idl.ui; singleton:=true
-Bundle-ActivationPolicy: lazy
-Require-Bundle: org.riscv.idl,
- org.riscv.idl.ide,
- org.eclipse.xtext.ui,
- org.eclipse.xtext.ui.shared,
- org.eclipse.xtext.ui.codetemplates.ui,
- org.eclipse.ui.editors;bundle-version="3.14.300",
- org.eclipse.ui.ide;bundle-version="3.18.500",
- org.eclipse.ui,
- org.eclipse.compare,
- org.eclipse.xtext.builder,
- org.eclipse.xtext.xbase.ui,
- org.eclipse.jdt.debug.ui,
- org.eclipse.xtext.common.types.ui
-Import-Package: org.apache.log4j
-Bundle-RequiredExecutionEnvironment: JavaSE-21
-Export-Package: org.riscv.idl.ui.contentassist,
- org.riscv.idl.ui.internal,
- org.riscv.idl.ui.quickfix
-Bundle-Activator: org.riscv.idl.ui.internal.IdlActivator
diff --git a/tools/eclipse/dev/org.riscv.idl.ui/plugin.xml_gen b/tools/eclipse/dev/org.riscv.idl.ui/plugin.xml_gen
deleted file mode 100644
index d51da39b10..0000000000
--- a/tools/eclipse/dev/org.riscv.idl.ui/plugin.xml_gen
+++ /dev/null
@@ -1,593 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/eclipse/dev/org.riscv.idl/.classpath b/tools/eclipse/dev/org.riscv.idl/.classpath
deleted file mode 100644
index 7994b69384..0000000000
--- a/tools/eclipse/dev/org.riscv.idl/.classpath
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/tools/eclipse/dev/org.riscv.idl/.launch/Generate Idl (idl) Language Infrastructure.launch b/tools/eclipse/dev/org.riscv.idl/.launch/Generate Idl (idl) Language Infrastructure.launch
deleted file mode 100644
index f8f4c81ad2..0000000000
--- a/tools/eclipse/dev/org.riscv.idl/.launch/Generate Idl (idl) Language Infrastructure.launch
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/eclipse/dev/org.riscv.idl/.project b/tools/eclipse/dev/org.riscv.idl/.project
deleted file mode 100644
index 5bbc2c734f..0000000000
--- a/tools/eclipse/dev/org.riscv.idl/.project
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
- org.riscv.idl
-
-
-
-
-
- org.eclipse.xtext.ui.shared.xtextBuilder
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- org.eclipse.pde.ManifestBuilder
-
-
-
-
- org.eclipse.pde.SchemaBuilder
-
-
-
-
-
- org.eclipse.xtext.ui.shared.xtextNature
- org.eclipse.jdt.core.javanature
- org.eclipse.pde.PluginNature
-
-
diff --git a/tools/eclipse/dev/org.riscv.idl/META-INF/MANIFEST.MF b/tools/eclipse/dev/org.riscv.idl/META-INF/MANIFEST.MF
deleted file mode 100644
index 523397c6cf..0000000000
--- a/tools/eclipse/dev/org.riscv.idl/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,31 +0,0 @@
-Manifest-Version: 1.0
-Automatic-Module-Name: org.riscv.idl
-Bundle-ManifestVersion: 2
-Bundle-Name: org.riscv.idl
-Bundle-Vendor: My Company
-Bundle-Version: 1.0.0.qualifier
-Bundle-SymbolicName: org.riscv.idl; singleton:=true
-Bundle-ActivationPolicy: lazy
-Require-Bundle: org.eclipse.xtext,
- org.eclipse.xtext.xbase,
- org.eclipse.equinox.common;bundle-version="3.19.0",
- org.eclipse.emf.ecore,
- org.eclipse.xtext.xbase.lib;bundle-version="2.39.0",
- org.eclipse.emf.common,
- org.antlr.runtime;bundle-version="[3.2.0,3.2.1)",
- org.eclipse.xtext.common.types,
- org.objectweb.asm;bundle-version="[9.8.0,9.9.0)";resolution:=optional
-Bundle-RequiredExecutionEnvironment: JavaSE-21
-Export-Package: org.riscv.idl,
- org.riscv.idl.parser.antlr.internal,
- org.riscv.idl.idl.impl,
- org.riscv.idl.validation,
- org.riscv.idl.serializer,
- org.riscv.idl.idl,
- org.riscv.idl.idl.util,
- org.riscv.idl.services,
- org.riscv.idl.scoping,
- org.riscv.idl.parser.antlr,
- org.riscv.idl.generator,
- org.riscv.idl.jvmmodel
-Import-Package: org.apache.log4j
diff --git a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/Idl.xtext b/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/Idl.xtext
deleted file mode 100644
index c22f5b4da5..0000000000
--- a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/Idl.xtext
+++ /dev/null
@@ -1,18 +0,0 @@
-//grammar org.riscv.idl.Idl with org.eclipse.xtext.xbase.Xbase
-grammar org.riscv.idl.Idl with org.eclipse.xtext.common.Terminals
-//import "http://www.eclipse.org/emf/2002/Ecore" as ecore
-
-generate idl "http://www.riscv.org/idl/Idl"
-
-Model:
- csrs += Csr*;
-
-Csr:
- 'csr' name=ID
- description=STRING
- address=STRING
- reset_value=STRING
- ';';
-
-//terminal IDLHEX returns ecore::EInt:
-// ('0x'|'0X') ('0'..'9'|'a'..'f'|'A'..'F'|'_')+;
diff --git a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/IdlRuntimeModule.java b/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/IdlRuntimeModule.java
deleted file mode 100644
index 556aa262ef..0000000000
--- a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/IdlRuntimeModule.java
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * generated by Xtext 2.39.0
- */
-package org.riscv.idl;
-
-
-/**
- * Use this class to register components to be used at runtime / without the Equinox extension registry.
- */
-public class IdlRuntimeModule extends AbstractIdlRuntimeModule {
-}
diff --git a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/jvmmodel/IdlJvmModelInferrer.xtend b/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/jvmmodel/IdlJvmModelInferrer.xtend
deleted file mode 100644
index c776c4f089..0000000000
--- a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/jvmmodel/IdlJvmModelInferrer.xtend
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * generated by Xtext 2.39.0
- */
-package org.riscv.idl.jvmmodel
-
-import com.google.inject.Inject
-import org.eclipse.xtext.xbase.jvmmodel.AbstractModelInferrer
-import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor
-import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder
-import org.riscv.idl.idl.Model
-
-/**
- * Infers a JVM model from the source model.
- *
- * The JVM model should contain all elements that would appear in the Java code
- * which is generated from the source model. Other models link against the JVM model rather than the source model.
- */
-class IdlJvmModelInferrer extends AbstractModelInferrer {
-
- /**
- * convenience API to build and initialize JVM types and their members.
- */
- @Inject extension JvmTypesBuilder
-
- /**
- * The dispatch method {@code infer} is called for each instance of the
- * given element's type that is contained in a resource.
- *
- * @param element
- * the model to create one or more
- * {@link org.eclipse.xtext.common.types.JvmDeclaredType declared
- * types} from.
- * @param acceptor
- * each created
- * {@link org.eclipse.xtext.common.types.JvmDeclaredType type}
- * without a container should be passed to the acceptor in order
- * get attached to the current resource. The acceptor's
- * {@link IJvmDeclaredTypeAcceptor#accept(org.eclipse.xtext.common.types.JvmDeclaredType)
- * accept(..)} method takes the constructed empty type for the
- * pre-indexing phase. This one is further initialized in the
- * indexing phase using the lambda you pass as the last argument.
- * @param isPreIndexingPhase
- * whether the method is called in a pre-indexing phase, i.e.
- * when the global index is not yet fully updated. You must not
- * rely on linking using the index if isPreIndexingPhase is
- * true.
- */
- def dispatch void infer(Model element, IJvmDeclaredTypeAcceptor acceptor, boolean isPreIndexingPhase) {
- // Here you explain how your model is mapped to Java elements, by writing the actual translation code.
-
- // An implementation for the initial hello world example could look like this:
-// acceptor.accept(element.toClass("my.company.greeting.MyGreetings")) [
-// for (greeting : element.greetings) {
-// members += greeting.toMethod("hello" + greeting.name, typeRef(String)) [
-// body = '''
-// return "Hello «greeting.name»";
-// '''
-// ]
-// }
-// ]
- }
-}
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/.project b/tools/eclipse/dev/org.xtext.udb.parent/.project
new file mode 100644
index 0000000000..859dc9d69b
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/.project
@@ -0,0 +1,17 @@
+
+
+ org.xtext.udb.parent
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/.classpath b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/.classpath
new file mode 100644
index 0000000000..f4bbb38e37
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/.classpath
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.riscv.idl.tests/.project b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/.project
similarity index 79%
rename from tools/eclipse/dev/org.riscv.idl.tests/.project
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/.project
index 6e7128016e..7ae71a1d9f 100644
--- a/tools/eclipse/dev/org.riscv.idl.tests/.project
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/.project
@@ -1,6 +1,6 @@
- org.riscv.idl.tests
+ org.xtext.udb.ide
@@ -25,8 +25,14 @@
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+ org.eclipse.m2e.core.maven2Nature
org.eclipse.xtext.ui.shared.xtextNature
org.eclipse.jdt.core.javanature
org.eclipse.pde.PluginNature
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/META-INF/MANIFEST.MF b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..1221d00e99
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: org.xtext.udb.ide
+Bundle-ManifestVersion: 2
+Bundle-Name: org.xtext.udb.ide
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.qualifier
+Bundle-SymbolicName: org.xtext.udb.ide;singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.xtext.udb,
+ org.eclipse.xtext.ide,
+ org.eclipse.xtext.xbase.ide,
+ org.antlr.runtime;bundle-version="[3.2.0,3.2.1)",
+ org.aopalliance;bundle-version="1.0.0",
+ org.bndtools.headless.build.plugin.gradle;bundle-version="7.1.0",
+ io.github.classgraph.classgraph;bundle-version="4.8.179"
+Bundle-RequiredExecutionEnvironment: JavaSE-21
+Export-Package: org.xtext.example.udb.ide.contentassist.antlr,
+ org.xtext.example.udb.ide.contentassist.antlr.internal
diff --git a/tools/eclipse/dev/org.riscv.idl.ide/build.properties b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/build.properties
similarity index 100%
rename from tools/eclipse/dev/org.riscv.idl.ide/build.properties
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/build.properties
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/example.udb b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/example.udb
new file mode 100644
index 0000000000..d609607014
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/example.udb
@@ -0,0 +1 @@
+csr CSR =
\ No newline at end of file
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/pom.xml b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/pom.xml
new file mode 100644
index 0000000000..68d7d4b78b
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/pom.xml
@@ -0,0 +1,178 @@
+
+ 4.0.0
+
+ org.xtext.udb
+ org.xtext.udb.parent
+ 1.0.0-SNAPSHOT
+
+ org.xtext.udb.ide
+ eclipse-plugin
+
+
+
+ ch.qos.reload4j
+ reload4j
+
+
+ org.eclipse.lsp4j
+ org.eclipse.lsp4j
+
+
+ org.ow2.asm
+ asm
+
+
+
+
+
+ org.eclipse.xtend
+ xtend-maven-plugin
+
+
+ org.eclipse.tycho
+ target-platform-configuration
+
+ consider
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+ 3.5.0
+
+
+ copy-dependencies
+ package
+
+ copy-dependencies
+
+
+ p2.eclipse-feature
+ ${project.build.directory}/libs
+ false
+ false
+ true
+ true
+
+ icu4j,
+ commons-logging,
+ org.eclipse.core.commands,
+ org.eclipse.core.contenttype,
+ org.eclipse.core.expressions,
+ org.eclipse.core.filesystem,
+ org.eclipse.core.jobs,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.core.variables,
+ org.eclipse.debug.core,
+ org.eclipse.emf.codegen.ecore,
+ org.eclipse.emf.codegen,
+ org.eclipse.emf.mwe.core,
+ org.eclipse.emf.mwe.utils,
+ org.eclipse.emf.mwe2.lib,
+ org.eclipse.emf.mwe2.runtime,
+ org.eclipse.equinox.app,
+ org.eclipse.equinox.preferences,
+ org.eclipse.equinox.registry,
+ org.eclipse.jdt.core,
+ org.eclipse.jdt.debug,
+ org.eclipse.jdt.launching,
+ org.eclipse.text,
+
+
+
+
+
+
+ com.googlecode.addjars-maven-plugin
+ addjars-maven-plugin
+ 1.0.5
+
+
+ package
+
+ add-jars
+
+
+
+
+ ${project.build.directory}/libs
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.4.1
+
+
+
+ org.eclipse.xtext.ide.server.ServerLauncher
+
+
+ plugin.properties
+
+
+
+
+
+
+ *:org.xtext.udb.ide-org.eclipse.lsp4j*
+ *:org.xtext.udb.ide-com.google.guava*
+ *:org.xtext.udb.ide-asm*
+ *:org.xtext.udb.ide-log4j*
+ *:org.xtext.udb.ide-reload4j*
+ *:org.xtext.udb.ide-org.objectweb.asm*
+ *:org.xtext.udb.ide-org.apache.log4j*
+ *:*commons-logging*
+
+
+
+
+ *:*
+
+ **/*.java
+ META-INF/INDEX.LIST
+ META-INF/*.SF
+ META-INF/*.DSA
+ META-INF/*.RSA
+ .options
+ .api_description
+ *.profile
+ *.html
+ about.*
+ about_files/*
+ plugin.xml
+ systembundle.properties
+ profile.list
+ **/*._trace
+ **/*.g
+ **/*.mwe2
+ **/*.xtext
+
+
+
+ true
+ ls
+ false
+
+
+
+ package
+
+ shade
+
+
+
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.riscv.idl.ide/src/org/riscv/idl/ide/IdlIdeModule.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/src/org/xtext/example/udb/ide/UdbIdeModule.java
similarity index 50%
rename from tools/eclipse/dev/org.riscv.idl.ide/src/org/riscv/idl/ide/IdlIdeModule.java
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/src/org/xtext/example/udb/ide/UdbIdeModule.java
index c11cfdbfbe..bea4c26fa6 100644
--- a/tools/eclipse/dev/org.riscv.idl.ide/src/org/riscv/idl/ide/IdlIdeModule.java
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/src/org/xtext/example/udb/ide/UdbIdeModule.java
@@ -1,11 +1,11 @@
/*
* generated by Xtext 2.39.0
*/
-package org.riscv.idl.ide;
+package org.xtext.example.udb.ide;
/**
* Use this class to register ide components.
*/
-public class IdlIdeModule extends AbstractIdlIdeModule {
+public class UdbIdeModule extends AbstractUdbIdeModule {
}
diff --git a/tools/eclipse/dev/org.riscv.idl.ide/src/org/riscv/idl/ide/IdlIdeSetup.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/src/org/xtext/example/udb/ide/UdbIdeSetup.java
similarity index 50%
rename from tools/eclipse/dev/org.riscv.idl.ide/src/org/riscv/idl/ide/IdlIdeSetup.java
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/src/org/xtext/example/udb/ide/UdbIdeSetup.java
index e903726d65..c44fd1b19e 100644
--- a/tools/eclipse/dev/org.riscv.idl.ide/src/org/riscv/idl/ide/IdlIdeSetup.java
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/src/org/xtext/example/udb/ide/UdbIdeSetup.java
@@ -1,22 +1,22 @@
/*
* generated by Xtext 2.39.0
*/
-package org.riscv.idl.ide;
+package org.xtext.example.udb.ide;
import com.google.inject.Guice;
import com.google.inject.Injector;
import org.eclipse.xtext.util.Modules2;
-import org.riscv.idl.IdlRuntimeModule;
-import org.riscv.idl.IdlStandaloneSetup;
+import org.xtext.example.udb.UdbRuntimeModule;
+import org.xtext.example.udb.UdbStandaloneSetup;
/**
* Initialization support for running Xtext languages as language servers.
*/
-public class IdlIdeSetup extends IdlStandaloneSetup {
+public class UdbIdeSetup extends UdbStandaloneSetup {
@Override
public Injector createInjector() {
- return Guice.createInjector(Modules2.mixin(new IdlRuntimeModule(), new IdlIdeModule()));
+ return Guice.createInjector(Modules2.mixin(new UdbRuntimeModule(), new UdbIdeModule()));
}
-
+
}
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/MANIFEST.MF b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/MANIFEST.MF
new file mode 100644
index 0000000000..074c0cc9d8
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: org.xtext.udb.ide
+Bundle-ManifestVersion: 2
+Bundle-Name: org.xtext.udb.ide
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.202510230637
+Bundle-SymbolicName: org.xtext.udb.ide;singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.xtext.udb,org.eclipse.xtext.ide,org.eclipse.xtext.xb
+ ase.ide,org.antlr.runtime;bundle-version="[3.2.0,3.2.1)",org.aopallianc
+ e;bundle-version="1.0.0",org.bndtools.headless.build.plugin.gradle;bund
+ le-version="7.1.0",io.github.classgraph.classgraph;bundle-version="4.8.
+ 179"
+Export-Package: org.xtext.example.udb.ide.contentassist.antlr,org.xtext.
+ example.udb.ide.contentassist.antlr.internal
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=21))"
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/classes/META-INF/services/org.eclipse.xtext.ISetup b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/classes/META-INF/services/org.eclipse.xtext.ISetup
new file mode 100644
index 0000000000..abea73b110
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/classes/META-INF/services/org.eclipse.xtext.ISetup
@@ -0,0 +1 @@
+org.xtext.example.udb.ide.UdbIdeSetup
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/libs/asm-9.8.jar b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/libs/asm-9.8.jar
new file mode 100644
index 0000000000..4f0c86e08b
Binary files /dev/null and b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/libs/asm-9.8.jar differ
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/libs/org.eclipse.lsp4j-0.24.0.jar b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/libs/org.eclipse.lsp4j-0.24.0.jar
new file mode 100644
index 0000000000..48e0388bb4
Binary files /dev/null and b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/libs/org.eclipse.lsp4j-0.24.0.jar differ
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/libs/reload4j-1.2.26.jar b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/libs/reload4j-1.2.26.jar
new file mode 100644
index 0000000000..f4e175f3f6
Binary files /dev/null and b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/libs/reload4j-1.2.26.jar differ
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/maven-archiver/pom.properties b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/maven-archiver/pom.properties
new file mode 100644
index 0000000000..e78c695fb8
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=org.xtext.udb.ide
+groupId=org.xtext.udb
+version=1.0.0-SNAPSHOT
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/org.xtext.udb.ide-1.0.0-SNAPSHOT.jar b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/org.xtext.udb.ide-1.0.0-SNAPSHOT.jar
new file mode 100644
index 0000000000..e3c31a2a19
Binary files /dev/null and b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/target/org.xtext.udb.ide-1.0.0-SNAPSHOT.jar differ
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/test.udb b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/test.udb
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/udb.tmLanguage.json b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/udb.tmLanguage.json
new file mode 100644
index 0000000000..98784412c7
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ide/udb.tmLanguage.json
@@ -0,0 +1,43 @@
+{
+"name": "Udb",
+"scopeName": "text.udb",
+"fileTypes": [
+ "udb"
+],
+"repository": {
+ "general": {
+ "patterns": [
+ {
+ "include": "#linecomment"
+ },
+ {
+ "include": "#blockcomment"
+ },
+ {
+ "include": "#keyword"
+ }
+ ]
+ },
+ "linecomment": {
+ "name": "comment.line.double-dash.dmodel",
+ "begin": "(^[ \\t]+)?(?=//)",
+ "end": "(?=$)"
+ },
+ "blockcomment": {
+ "name": "comment.block.dmodel",
+ "begin": "/\\*(\\*)?(?!/)",
+ "end": "\\*/"
+ },
+ "keyword": {
+ "name": "keyword.control.mydsl",
+ "match": "\\b(entity|datatype)\\b|!"
+
+ }
+},
+"patterns": [
+ {
+ "include": "#general"
+ }
+],
+"uuid": "8383e49a-fa0d-4bb5-827b-10e8abb294ca"
+}
\ No newline at end of file
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.target/.project b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.target/.project
new file mode 100644
index 0000000000..ea0315ee2d
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.target/.project
@@ -0,0 +1,17 @@
+
+
+ org.xtext.udb.target
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.target/org.xtext.udb.target.target b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.target/org.xtext.udb.target.target
new file mode 100644
index 0000000000..9bd3180819
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.target/org.xtext.udb.target.target
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.target/pom.xml b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.target/pom.xml
new file mode 100644
index 0000000000..885a428229
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.target/pom.xml
@@ -0,0 +1,15 @@
+
+ 4.0.0
+
+ org.xtext.udb
+ org.xtext.udb.parent
+ 1.0.0-SNAPSHOT
+
+ org.xtext.udb.target
+ eclipse-target-definition
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/.classpath b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/.classpath
new file mode 100644
index 0000000000..f4bbb38e37
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/.classpath
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.riscv.idl.ui/.project b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/.project
similarity index 79%
rename from tools/eclipse/dev/org.riscv.idl.ui/.project
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/.project
index 70ed9972db..f022fb5fc8 100644
--- a/tools/eclipse/dev/org.riscv.idl.ui/.project
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/.project
@@ -1,6 +1,6 @@
- org.riscv.idl.ui
+ org.xtext.udb.tests
@@ -25,8 +25,14 @@
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+ org.eclipse.m2e.core.maven2Nature
org.eclipse.xtext.ui.shared.xtextNature
org.eclipse.jdt.core.javanature
org.eclipse.pde.PluginNature
diff --git a/tools/eclipse/dev/org.riscv.idl.tests/META-INF/MANIFEST.MF b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/META-INF/MANIFEST.MF
similarity index 51%
rename from tools/eclipse/dev/org.riscv.idl.tests/META-INF/MANIFEST.MF
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/META-INF/MANIFEST.MF
index 8bc1924414..c91866d293 100644
--- a/tools/eclipse/dev/org.riscv.idl.tests/META-INF/MANIFEST.MF
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/META-INF/MANIFEST.MF
@@ -1,17 +1,17 @@
Manifest-Version: 1.0
-Automatic-Module-Name: org.riscv.idl.tests
+Automatic-Module-Name: org.xtext.udb.tests
Bundle-ManifestVersion: 2
-Bundle-Name: org.riscv.idl.tests
+Bundle-Name: org.xtext.udb.tests
Bundle-Vendor: My Company
Bundle-Version: 1.0.0.qualifier
-Bundle-SymbolicName: org.riscv.idl.tests; singleton:=true
+Bundle-SymbolicName: org.xtext.udb.tests; singleton:=true
Bundle-ActivationPolicy: lazy
-Require-Bundle: org.riscv.idl,
+Require-Bundle: org.xtext.udb,
org.eclipse.xtext.testing,
org.eclipse.xtext.xbase.testing,
- org.eclipse.xtext.xbase.lib;bundle-version="2.39.0",
- org.objectweb.asm;bundle-version="[9.8.0,9.9.0)";resolution:=optional
+ org.eclipse.xtext.xbase.lib;bundle-version="2.39.0"
Import-Package: org.junit.jupiter.api;version="[5.1.0,6.0.0)",
org.junit.jupiter.api.extension;version="[5.1.0,6.0.0)"
Bundle-RequiredExecutionEnvironment: JavaSE-21
-Export-Package: org.riscv.idl.tests;x-internal=true
+Export-Package: org.xtext.example.udb.tests;x-internal=true,
+ org.xtext.example.udb.tests;x-internal=true
diff --git a/tools/eclipse/dev/org.riscv.idl.tests/build.properties b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/build.properties
similarity index 100%
rename from tools/eclipse/dev/org.riscv.idl.tests/build.properties
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/build.properties
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/pom.xml b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/pom.xml
new file mode 100644
index 0000000000..97d85e064e
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/pom.xml
@@ -0,0 +1,21 @@
+
+ 4.0.0
+
+ org.xtext.udb
+ org.xtext.udb.parent
+ 1.0.0-SNAPSHOT
+
+ org.xtext.udb.tests
+ eclipse-test-plugin
+
+
+
+
+ org.eclipse.xtend
+ xtend-maven-plugin
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/src/org/xtext/example/udb/tests/UdbParsingTest.xtend b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/src/org/xtext/example/udb/tests/UdbParsingTest.xtend
new file mode 100644
index 0000000000..3c323085d9
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/src/org/xtext/example/udb/tests/UdbParsingTest.xtend
@@ -0,0 +1,105 @@
+/*
+ * generated by Xtext 2.39.0
+ */
+package org.xtext.example.udb.tests
+
+import com.google.inject.Inject
+import org.eclipse.xtext.testing.InjectWith
+import org.eclipse.xtext.testing.extensions.InjectionExtension
+import org.eclipse.xtext.testing.util.ParseHelper
+import org.junit.jupiter.api.Assertions
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.^extension.ExtendWith
+import org.xtext.example.udb.udb.Model
+
+@ExtendWith(InjectionExtension)
+@InjectWith(UdbInjectorProvider)
+class UdbParsingTest {
+ @Inject
+ ParseHelper parseHelper
+
+ @Test
+ def void parsesValidCSR() {
+ val result = parseHelper.parse('''
+ csr myCsr "status" 0x400 "0x0";
+
+ csr aCsr "mode" 0x0 "reset";
+
+
+ csr bCsr "mode" 0xb85c_4a "0";
+
+ csr cCsr "mode" 0xb8_5_c_4a "0";
+
+
+ csr dCsr "mode" 0xb85______c4a "0";
+
+ ''')
+ Assertions.assertNotNull(result)
+ val errors = result.eResource.errors
+ Assertions.assertTrue(errors.isEmpty, '''Unexpected errors: «errors.join(", ")»''')
+
+ var case0 = result.getCsrs().get(0);
+ Assertions.assertEquals("myCsr", case0.getName());
+ Assertions.assertEquals("status", case0.getDescription());
+ Assertions.assertEquals("0x400", case0.getAddress());
+ Assertions.assertEquals("0x0", case0.getReset_value());
+
+ var case1 = result.getCsrs().get(1);
+ Assertions.assertEquals("aCsr", case1.getName());
+ Assertions.assertEquals("mode", case1.getDescription());
+ Assertions.assertEquals("0x0", case1.getAddress());
+ Assertions.assertEquals("reset", case1.getReset_value());
+
+ var case2 = result.getCsrs().get(2);
+ Assertions.assertEquals("bCsr", case2.getName());
+ Assertions.assertEquals("mode", case2.getDescription());
+ Assertions.assertEquals("0xb85c_4a", case2.getAddress());
+ Assertions.assertEquals("0", case2.getReset_value());
+
+ var case3 = result.getCsrs().get(3);
+ Assertions.assertEquals("cCsr", case3.getName());
+ Assertions.assertEquals("mode", case3.getDescription());
+ Assertions.assertEquals("0xb8_5_c_4a", case3.getAddress());
+ Assertions.assertEquals("0", case3.getReset_value());
+
+ var case4 = result.getCsrs().get(4);
+ Assertions.assertEquals("dCsr", case4.getName());
+ Assertions.assertEquals("mode", case4.getDescription());
+ Assertions.assertEquals("0xb85______c4a", case4.getAddress());
+ Assertions.assertEquals("0", case4.getReset_value());
+
+ }
+
+
+ @Test
+ def void rejectsBadHex() throws Exception {
+ var a = parseHelper.parse('''
+ csr BAD1 "badHex1" 0xG1 "0" ;
+
+
+ ''');
+
+ var b = parseHelper.parse('''
+
+ csr BAD2 "badHex2" 0x_400 "0";
+
+ ''');
+ var c = parseHelper.parse('''
+
+ csr BAD3 "badHex3" 0x400_ "0";
+
+
+ ''');
+ var d = parseHelper.parse('''
+ csr BAD4 "badHex4" 0x_400_ "0";
+
+ ''');
+ Assertions.assertFalse(a.eResource().getErrors().isEmpty());
+ Assertions.assertFalse(b.eResource().getErrors().isEmpty());
+ Assertions.assertFalse(c.eResource().getErrors().isEmpty());
+ Assertions.assertFalse(d.eResource().getErrors().isEmpty());
+
+ }
+
+
+}
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/target/MANIFEST.MF b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/target/MANIFEST.MF
new file mode 100644
index 0000000000..81ab03fa17
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/target/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: org.xtext.udb.tests
+Bundle-ManifestVersion: 2
+Bundle-Name: org.xtext.udb.tests
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.202510230637
+Bundle-SymbolicName: org.xtext.udb.tests; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.xtext.udb,org.eclipse.xtext.testing,org.eclipse.xtex
+ t.xbase.testing,org.eclipse.xtext.xbase.lib;bundle-version="2.39.0"
+Import-Package: org.junit.jupiter.api;version="[5.1.0,6.0.0)",org.junit.
+ jupiter.api.extension;version="[5.1.0,6.0.0)"
+Export-Package: org.xtext.example.udb.tests;x-internal=true,org.xtext.ex
+ ample.udb.tests;x-internal=true
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=21))"
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/target/maven-archiver/pom.properties b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/target/maven-archiver/pom.properties
new file mode 100644
index 0000000000..5aa125a294
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=org.xtext.udb.tests
+groupId=org.xtext.udb
+version=1.0.0-SNAPSHOT
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/target/org.xtext.udb.tests-1.0.0-SNAPSHOT.jar b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/target/org.xtext.udb.tests-1.0.0-SNAPSHOT.jar
new file mode 100644
index 0000000000..5078979881
Binary files /dev/null and b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.tests/target/org.xtext.udb.tests-1.0.0-SNAPSHOT.jar differ
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/.classpath b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/.classpath
new file mode 100644
index 0000000000..f4bbb38e37
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/.classpath
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/.project b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/.project
new file mode 100644
index 0000000000..5dfeca2ac2
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/.project
@@ -0,0 +1,40 @@
+
+
+ org.xtext.udb.ui.tests
+
+
+
+
+
+ org.eclipse.xtext.ui.shared.xtextBuilder
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Nature
+ org.eclipse.xtext.ui.shared.xtextNature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.pde.PluginNature
+
+
diff --git a/tools/eclipse/dev/org.riscv.idl.ui.tests/META-INF/MANIFEST.MF b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/META-INF/MANIFEST.MF
similarity index 63%
rename from tools/eclipse/dev/org.riscv.idl.ui.tests/META-INF/MANIFEST.MF
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/META-INF/MANIFEST.MF
index 7a47b58471..0238d9fdc5 100644
--- a/tools/eclipse/dev/org.riscv.idl.ui.tests/META-INF/MANIFEST.MF
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/META-INF/MANIFEST.MF
@@ -1,12 +1,12 @@
Manifest-Version: 1.0
-Automatic-Module-Name: org.riscv.idl.ui.tests
+Automatic-Module-Name: org.xtext.udb.ui.tests
Bundle-ManifestVersion: 2
-Bundle-Name: org.riscv.idl.ui.tests
+Bundle-Name: org.xtext.udb.ui.tests
Bundle-Vendor: My Company
Bundle-Version: 1.0.0.qualifier
-Bundle-SymbolicName: org.riscv.idl.ui.tests; singleton:=true
+Bundle-SymbolicName: org.xtext.udb.ui.tests; singleton:=true
Bundle-ActivationPolicy: lazy
-Require-Bundle: org.riscv.idl.ui,
+Require-Bundle: org.xtext.udb.ui,
org.eclipse.xtext.testing,
org.eclipse.xtext.ui.testing,
org.eclipse.xtext.xbase.testing,
@@ -16,4 +16,5 @@ Require-Bundle: org.riscv.idl.ui,
Import-Package: org.junit.jupiter.api;version="[5.1.0,6.0.0)",
org.junit.jupiter.api.extension;version="[5.1.0,6.0.0)"
Bundle-RequiredExecutionEnvironment: JavaSE-21
-Export-Package: org.riscv.idl.ui.tests;x-internal=true
+Export-Package: org.xtext.example.udb.ui.tests;x-internal=true,
+ org.xtext.example.udb.ui.tests;x-internal=true
diff --git a/tools/eclipse/dev/org.riscv.idl.ui.tests/build.properties b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/build.properties
similarity index 100%
rename from tools/eclipse/dev/org.riscv.idl.ui.tests/build.properties
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/build.properties
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/pom.xml b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/pom.xml
new file mode 100644
index 0000000000..cfe00766e4
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/pom.xml
@@ -0,0 +1,28 @@
+
+ 4.0.0
+
+ org.xtext.udb
+ org.xtext.udb.parent
+ 1.0.0-SNAPSHOT
+
+ org.xtext.udb.ui.tests
+ eclipse-test-plugin
+
+
+
+
+ org.eclipse.xtend
+ xtend-maven-plugin
+
+
+ org.eclipse.tycho
+ tycho-surefire-plugin
+
+ true
+
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/target/MANIFEST.MF b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/target/MANIFEST.MF
new file mode 100644
index 0000000000..0dee616d6b
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/target/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: org.xtext.udb.ui.tests
+Bundle-ManifestVersion: 2
+Bundle-Name: org.xtext.udb.ui.tests
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.202510230637
+Bundle-SymbolicName: org.xtext.udb.ui.tests; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.xtext.udb.ui,org.eclipse.xtext.testing,org.eclipse.x
+ text.ui.testing,org.eclipse.xtext.xbase.testing,org.eclipse.xtext.xbase
+ .ui.testing,org.eclipse.core.runtime,org.eclipse.ui.workbench;resolutio
+ n:=optional
+Import-Package: org.junit.jupiter.api;version="[5.1.0,6.0.0)",org.junit.
+ jupiter.api.extension;version="[5.1.0,6.0.0)"
+Export-Package: org.xtext.example.udb.ui.tests;x-internal=true,org.xtext
+ .example.udb.ui.tests;x-internal=true
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=21))"
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/target/maven-archiver/pom.properties b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/target/maven-archiver/pom.properties
new file mode 100644
index 0000000000..050073b754
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=org.xtext.udb.ui.tests
+groupId=org.xtext.udb
+version=1.0.0-SNAPSHOT
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/target/org.xtext.udb.ui.tests-1.0.0-SNAPSHOT.jar b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/target/org.xtext.udb.ui.tests-1.0.0-SNAPSHOT.jar
new file mode 100644
index 0000000000..87763b3aff
Binary files /dev/null and b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui.tests/target/org.xtext.udb.ui.tests-1.0.0-SNAPSHOT.jar differ
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/.classpath b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/.classpath
new file mode 100644
index 0000000000..f4bbb38e37
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/.classpath
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.riscv.idl.ide/.project b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/.project
similarity index 79%
rename from tools/eclipse/dev/org.riscv.idl.ide/.project
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/.project
index 513f13c2e6..803b95a36f 100644
--- a/tools/eclipse/dev/org.riscv.idl.ide/.project
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/.project
@@ -1,6 +1,6 @@
- org.riscv.idl.ide
+ org.xtext.udb.ui
@@ -25,8 +25,14 @@
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+ org.eclipse.m2e.core.maven2Nature
org.eclipse.xtext.ui.shared.xtextNature
org.eclipse.jdt.core.javanature
org.eclipse.pde.PluginNature
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/META-INF/MANIFEST.MF b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..8d0da8240d
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,26 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: org.xtext.udb.ui
+Bundle-ManifestVersion: 2
+Bundle-Name: org.xtext.udb.ui
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.qualifier
+Bundle-SymbolicName: org.xtext.udb.ui; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.xtext.udb,
+ org.xtext.udb.ide,
+ org.eclipse.xtext.ui,
+ org.eclipse.xtext.ui.shared,
+ org.eclipse.xtext.ui.codetemplates.ui,
+ org.eclipse.ui.editors;bundle-version="3.14.300",
+ org.eclipse.ui.ide;bundle-version="3.18.500",
+ org.eclipse.ui,
+ org.eclipse.compare,
+ org.eclipse.xtext.builder
+Import-Package: org.apache.log4j
+Bundle-RequiredExecutionEnvironment: JavaSE-21
+Export-Package: org.xtext.example.udb.ui.contentassist,
+ org.xtext.udb.ui.internal,
+ org.xtext.example.udb.ui.quickfix,
+ org.xtext.example.udb.ui.contentassist,
+ org.xtext.example.udb.ui.quickfix
+Bundle-Activator: org.xtext.udb.ui.internal.UdbActivator
diff --git a/tools/eclipse/dev/org.riscv.idl.ui/build.properties b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/build.properties
similarity index 100%
rename from tools/eclipse/dev/org.riscv.idl.ui/build.properties
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/build.properties
diff --git a/tools/eclipse/dev/org.riscv.idl.ui/plugin.xml b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/plugin.xml
similarity index 55%
rename from tools/eclipse/dev/org.riscv.idl.ui/plugin.xml
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/plugin.xml
index 162c77ea5c..9a07f9bf39 100644
--- a/tools/eclipse/dev/org.riscv.idl.ui/plugin.xml
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/plugin.xml
@@ -4,48 +4,48 @@
+ extensions="udb"
+ id="org.xtext.example.udb.Udb"
+ name="Udb Editor">
+ definitionId="org.xtext.example.udb.Udb.Editor.opened">
+ class="org.xtext.example.udb.ui.UdbExecutableExtensionFactory:org.eclipse.xtext.ui.editor.handler.ValidateActionHandler"
+ commandId="org.xtext.example.udb.Udb.validate">
+ definitionId="org.xtext.example.udb.Udb.Editor.opened">
-
+
-
+
@@ -54,22 +54,22 @@
-
+
-
+
@@ -78,33 +78,33 @@
-
+ class="org.xtext.example.udb.ui.UdbExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+ id="org.xtext.example.udb.Udb"
+ name="Udb">
+
-
+
-
+
-
+ class="org.xtext.example.udb.ui.UdbExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+ id="org.xtext.example.udb.Udb"
+ name="Udb">
+
@@ -114,14 +114,14 @@
+ id="org.xtext.example.udb.ui.keyword_Udb"
+ label="Udb"/>
@@ -142,12 +142,12 @@
+ definitionId="org.xtext.example.udb.Udb.Editor.opened">
@@ -157,7 +157,7 @@
-
+
@@ -165,7 +165,7 @@
-
+
@@ -174,7 +174,7 @@
style="push" tooltip="Copy Qualified Name">
-
+
@@ -187,7 +187,7 @@
-
+
@@ -195,11 +195,11 @@
+ definitionId="org.xtext.example.udb.Udb.Editor.opened">
@@ -207,9 +207,9 @@
@@ -217,68 +217,68 @@
+ class="org.xtext.example.udb.ui.UdbExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
+ type="udb">
+ class="org.xtext.example.udb.ui.UdbExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
+ uriExtension="udb">
-
+
-
+
+ class="org.xtext.example.udb.ui.UdbExecutableExtensionFactory:org.eclipse.xtext.builder.IXtextBuilderParticipant"
+ fileExtensions="udb"/>
-
+
-
+
@@ -289,20 +289,20 @@
-
+
-
+
@@ -310,11 +310,11 @@
+ definitionId="org.xtext.example.udb.Udb.Editor.opened">
@@ -334,33 +334,33 @@
style="push"
tooltip="Open Quick Outline">
-
+
-
+
+ class="org.xtext.example.udb.ui.UdbExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
+ markerType="org.xtext.udb.ui.udb.check.fast">
+ class="org.xtext.example.udb.ui.UdbExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
+ markerType="org.xtext.udb.ui.udb.check.normal">
+ class="org.xtext.example.udb.ui.UdbExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
+ markerType="org.xtext.udb.ui.udb.check.expensive">
@@ -370,11 +370,11 @@
+ definitionId="org.xtext.example.udb.Udb.Editor.opened">
@@ -386,7 +386,7 @@
style="push">
+ definitionId="org.xtext.example.udb.Udb.Editor.opened">
@@ -394,40 +394,40 @@
-
+
-
+
+ contentTypeId="org.xtext.example.udb.Udb.contenttype"
+ contentViewerId="org.xtext.example.udb.Udb.compare.contentViewers" />
-
+
+ contentTypeId="org.xtext.example.udb.Udb.contenttype"
+ contentMergeViewerId="org.xtext.example.udb.Udb.compare.contentMergeViewers" />
-
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/plugin.xml_gen b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/plugin.xml_gen
new file mode 100644
index 0000000000..9a07f9bf39
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/plugin.xml_gen
@@ -0,0 +1,434 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/pom.xml b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/pom.xml
new file mode 100644
index 0000000000..5f98617b8b
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/pom.xml
@@ -0,0 +1,21 @@
+
+ 4.0.0
+
+ org.xtext.udb
+ org.xtext.udb.parent
+ 1.0.0-SNAPSHOT
+
+ org.xtext.udb.ui
+ eclipse-plugin
+
+
+
+
+ org.eclipse.xtend
+ xtend-maven-plugin
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/IdlUiModule.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/UdbUiModule.java
similarity index 58%
rename from tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/IdlUiModule.java
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/UdbUiModule.java
index 0b47ebaa28..b929521844 100644
--- a/tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/IdlUiModule.java
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/UdbUiModule.java
@@ -1,16 +1,16 @@
/*
* generated by Xtext 2.39.0
*/
-package org.riscv.idl.ui;
+package org.xtext.example.udb.ui;
import org.eclipse.ui.plugin.AbstractUIPlugin;
/**
* Use this class to register components to be used within the Eclipse IDE.
*/
-public class IdlUiModule extends AbstractIdlUiModule {
+public class UdbUiModule extends AbstractUdbUiModule {
- public IdlUiModule(AbstractUIPlugin plugin) {
+ public UdbUiModule(AbstractUIPlugin plugin) {
super(plugin);
}
}
diff --git a/tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/contentassist/IdlProposalProvider.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/contentassist/UdbProposalProvider.java
similarity index 63%
rename from tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/contentassist/IdlProposalProvider.java
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/contentassist/UdbProposalProvider.java
index 4c48eedaf0..d4ca06f9d5 100644
--- a/tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/contentassist/IdlProposalProvider.java
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/contentassist/UdbProposalProvider.java
@@ -1,12 +1,12 @@
/*
* generated by Xtext 2.39.0
*/
-package org.riscv.idl.ui.contentassist;
+package org.xtext.example.udb.ui.contentassist;
/**
* See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#content-assist
* on how to customize the content assistant.
*/
-public class IdlProposalProvider extends AbstractIdlProposalProvider {
+public class UdbProposalProvider extends AbstractUdbProposalProvider {
}
diff --git a/tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/labeling/IdlDescriptionLabelProvider.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/labeling/UdbDescriptionLabelProvider.java
similarity index 83%
rename from tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/labeling/IdlDescriptionLabelProvider.java
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/labeling/UdbDescriptionLabelProvider.java
index 6154c4d412..18cd80ac72 100644
--- a/tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/labeling/IdlDescriptionLabelProvider.java
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/labeling/UdbDescriptionLabelProvider.java
@@ -1,23 +1,23 @@
/*
* generated by Xtext 2.39.0
*/
-package org.riscv.idl.ui.labeling;
+package org.xtext.example.udb.ui.labeling;
import org.eclipse.xtext.ui.label.DefaultDescriptionLabelProvider;
/**
* Provides labels for IEObjectDescriptions and IResourceDescriptions.
- *
+ *
* See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#label-provider
*/
-public class IdlDescriptionLabelProvider extends DefaultDescriptionLabelProvider {
+public class UdbDescriptionLabelProvider extends DefaultDescriptionLabelProvider {
// Labels and icons can be computed like this:
// @Override
// public String text(IEObjectDescription ele) {
// return ele.getName().toString();
// }
-//
+//
// @Override
// public String image(IEObjectDescription ele) {
// return ele.getEClass().getName() + ".gif";
diff --git a/tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/labeling/IdlLabelProvider.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/labeling/UdbLabelProvider.java
similarity index 76%
rename from tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/labeling/IdlLabelProvider.java
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/labeling/UdbLabelProvider.java
index 5f68e3cbee..8f3e80e23e 100644
--- a/tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/labeling/IdlLabelProvider.java
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/labeling/UdbLabelProvider.java
@@ -1,7 +1,7 @@
/*
* generated by Xtext 2.39.0
*/
-package org.riscv.idl.ui.labeling;
+package org.xtext.example.udb.ui.labeling;
import com.google.inject.Inject;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
@@ -9,18 +9,18 @@
/**
* Provides labels for EObjects.
- *
+ *
* See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#label-provider
*/
-public class IdlLabelProvider extends DefaultEObjectLabelProvider {
+public class UdbLabelProvider extends DefaultEObjectLabelProvider {
@Inject
- public IdlLabelProvider(AdapterFactoryLabelProvider delegate) {
+ public UdbLabelProvider(AdapterFactoryLabelProvider delegate) {
super(delegate);
}
// Labels and icons can be computed like this:
-
+
// String text(Greeting ele) {
// return "A greeting to " + ele.getName();
// }
diff --git a/tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/outline/IdlOutlineTreeProvider.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/outline/UdbOutlineTreeProvider.java
similarity index 71%
rename from tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/outline/IdlOutlineTreeProvider.java
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/outline/UdbOutlineTreeProvider.java
index d4a541879d..71e4fb5fa8 100644
--- a/tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/outline/IdlOutlineTreeProvider.java
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/outline/UdbOutlineTreeProvider.java
@@ -1,7 +1,7 @@
/*
* generated by Xtext 2.39.0
*/
-package org.riscv.idl.ui.outline;
+package org.xtext.example.udb.ui.outline;
import org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider;
@@ -10,6 +10,6 @@
*
* See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#outline
*/
-public class IdlOutlineTreeProvider extends DefaultOutlineTreeProvider {
+public class UdbOutlineTreeProvider extends DefaultOutlineTreeProvider {
}
diff --git a/tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/quickfix/IdlQuickfixProvider.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/quickfix/UdbQuickfixProvider.java
similarity index 83%
rename from tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/quickfix/IdlQuickfixProvider.java
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/quickfix/UdbQuickfixProvider.java
index 633a04f7c8..28f66e8685 100644
--- a/tools/eclipse/dev/org.riscv.idl.ui/src/org/riscv/idl/ui/quickfix/IdlQuickfixProvider.java
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/src/org/xtext/example/udb/ui/quickfix/UdbQuickfixProvider.java
@@ -1,7 +1,7 @@
/*
* generated by Xtext 2.39.0
*/
-package org.riscv.idl.ui.quickfix;
+package org.xtext.example.udb.ui.quickfix;
import org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider;
@@ -10,9 +10,9 @@
*
* See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#quick-fixes
*/
-public class IdlQuickfixProvider extends DefaultQuickfixProvider {
+public class UdbQuickfixProvider extends DefaultQuickfixProvider {
-// @Fix(IdlValidator.INVALID_NAME)
+// @Fix(UdbValidator.INVALID_NAME)
// public void capitalizeName(final Issue issue, IssueResolutionAcceptor acceptor) {
// acceptor.accept(issue, "Capitalize name", "Capitalize the name.", "upcase.png", new IModification() {
// public void apply(IModificationContext context) throws BadLocationException {
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/target/MANIFEST.MF b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/target/MANIFEST.MF
new file mode 100644
index 0000000000..c67dd8e415
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/target/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: org.xtext.udb.ui
+Bundle-ManifestVersion: 2
+Bundle-Name: org.xtext.udb.ui
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.202510230637
+Bundle-SymbolicName: org.xtext.udb.ui; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.xtext.udb,org.xtext.udb.ide,org.eclipse.xtext.ui,org
+ .eclipse.xtext.ui.shared,org.eclipse.xtext.ui.codetemplates.ui,org.ecli
+ pse.ui.editors;bundle-version="3.14.300",org.eclipse.ui.ide;bundle-vers
+ ion="3.18.500",org.eclipse.ui,org.eclipse.compare,org.eclipse.xtext.bui
+ lder
+Import-Package: org.apache.log4j
+Export-Package: org.xtext.example.udb.ui.contentassist,org.xtext.udb.ui.
+ internal,org.xtext.example.udb.ui.quickfix,org.xtext.example.udb.ui.con
+ tentassist,org.xtext.example.udb.ui.quickfix
+Bundle-Activator: org.xtext.udb.ui.internal.UdbActivator
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=21))"
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/target/classes/org/xtext/udb/ui/internal/UdbActivator.class b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/target/classes/org/xtext/udb/ui/internal/UdbActivator.class
new file mode 100644
index 0000000000..e9a3373281
Binary files /dev/null and b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/target/classes/org/xtext/udb/ui/internal/UdbActivator.class differ
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/target/maven-archiver/pom.properties b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/target/maven-archiver/pom.properties
new file mode 100644
index 0000000000..79c67e470e
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=org.xtext.udb.ui
+groupId=org.xtext.udb
+version=1.0.0-SNAPSHOT
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/target/org.xtext.udb.ui-1.0.0-SNAPSHOT.jar b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/target/org.xtext.udb.ui-1.0.0-SNAPSHOT.jar
new file mode 100644
index 0000000000..149dfce1f3
Binary files /dev/null and b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb.ui/target/org.xtext.udb.ui-1.0.0-SNAPSHOT.jar differ
diff --git a/tools/eclipse/dev/org.riscv.idl/.antlr-generator-3.2.0-patch.jar b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/.antlr-generator-3.2.0-patch.jar
similarity index 100%
rename from tools/eclipse/dev/org.riscv.idl/.antlr-generator-3.2.0-patch.jar
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/.antlr-generator-3.2.0-patch.jar
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/.classpath b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/.classpath
new file mode 100644
index 0000000000..f4bbb38e37
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/.classpath
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.riscv.idl/.launch/Launch Runtime Eclipse.launch b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/.launch/Launch Runtime Eclipse.launch
similarity index 97%
rename from tools/eclipse/dev/org.riscv.idl/.launch/Launch Runtime Eclipse.launch
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/.launch/Launch Runtime Eclipse.launch
index d43c9fe64f..569c8b2774 100644
--- a/tools/eclipse/dev/org.riscv.idl/.launch/Launch Runtime Eclipse.launch
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/.launch/Launch Runtime Eclipse.launch
@@ -4,7 +4,7 @@
-
+
diff --git a/tools/eclipse/dev/org.riscv.idl.ui.tests/.project b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/.project
similarity index 80%
rename from tools/eclipse/dev/org.riscv.idl.ui.tests/.project
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/.project
index 2587ea097e..7fbb5b6043 100644
--- a/tools/eclipse/dev/org.riscv.idl.ui.tests/.project
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/.project
@@ -1,6 +1,6 @@
- org.riscv.idl.ui.tests
+ org.xtext.udb
@@ -25,8 +25,14 @@
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+ org.eclipse.m2e.core.maven2Nature
org.eclipse.xtext.ui.shared.xtextNature
org.eclipse.jdt.core.javanature
org.eclipse.pde.PluginNature
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/META-INF/MANIFEST.MF b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..74d7f22a83
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/META-INF/MANIFEST.MF
@@ -0,0 +1,32 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: org.xtext.udb
+Bundle-ManifestVersion: 2
+Bundle-Name: org.xtext.udb
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.qualifier
+Bundle-SymbolicName: org.xtext.udb; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.xtext,
+ org.eclipse.xtext.xbase,
+ org.eclipse.equinox.common;bundle-version="3.19.0",
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.common,
+ org.antlr.runtime;bundle-version="[3.2.0,3.2.1)",
+ org.aopalliance;bundle-version="1.0.0",
+ org.bndtools.headless.build.plugin.gradle;bundle-version="7.1.0",
+ io.github.classgraph.classgraph;bundle-version="4.8.179",
+ org.eclipse.xtext.xbase.lib.source;bundle-version="2.39.0",
+ org.eclipse.xtext.xbase.lib;bundle-version="2.39.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-21
+Export-Package: org.xtext.example.udb.parser.antlr,
+ org.xtext.example.udb.udb.impl,
+ org.xtext.example.udb.parser.antlr.internal,
+ org.xtext.example.udb.scoping,
+ org.xtext.example.udb.generator,
+ org.xtext.example.udb.services,
+ org.xtext.example.udb.udb,
+ org.xtext.example.udb.udb.util,
+ org.xtext.example.udb.validation,
+ org.xtext.example.udb.serializer,
+ org.xtext.example.udb
+Import-Package: org.apache.log4j
diff --git a/tools/eclipse/dev/org.riscv.idl/build.properties b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/build.properties
similarity index 100%
rename from tools/eclipse/dev/org.riscv.idl/build.properties
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/build.properties
diff --git a/tools/eclipse/dev/org.riscv.idl/plugin.xml b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/plugin.xml
similarity index 53%
rename from tools/eclipse/dev/org.riscv.idl/plugin.xml
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/plugin.xml
index 4ce0470b94..42f931ee8a 100644
--- a/tools/eclipse/dev/org.riscv.idl/plugin.xml
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/plugin.xml
@@ -3,8 +3,8 @@
+ uri = "http://www.xtext.org/example/udb/Udb"
+ class = "org.xtext.example.udb.udb.UdbPackage"
+ genModel = "model/generated/Udb.genmodel" />
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/plugin.xml_gen b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/plugin.xml_gen
new file mode 100644
index 0000000000..42f931ee8a
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/plugin.xml_gen
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/pom.xml b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/pom.xml
new file mode 100644
index 0000000000..2246ab8728
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/pom.xml
@@ -0,0 +1,96 @@
+
+ 4.0.0
+
+ org.xtext.udb
+ org.xtext.udb.parent
+ 1.0.0-SNAPSHOT
+
+ org.xtext.udb
+ eclipse-plugin
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.0.0
+
+
+
+ mwe2Launcher
+ generate-sources
+
+ java
+
+
+
+
+ org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher
+
+ /${project.basedir}/src/org/xtext/example/udb/GenerateUdb.mwe2
+ -p
+ rootPath=/${project.basedir}/..
+
+ compile
+ true
+ false
+
+
+
+ org.eclipse.xtext
+ org.eclipse.xtext.xtext.generator.dependencies
+ ${xtextVersion}
+
+
+
+
+ org.eclipse.xtend
+ xtend-maven-plugin
+
+
+
+ org.apache.maven.plugins
+ maven-clean-plugin
+
+
+
+ ${basedir}/../org.xtext.udb/src-gen/
+
+ **/*
+
+
+
+ ${basedir}/../org.xtext.udb.tests/src-gen/
+
+ **/*
+
+
+
+ ${basedir}/../org.xtext.udb.ide/src-gen/
+
+ **/*
+
+
+
+ ${basedir}/../org.xtext.udb.ui/src-gen/
+
+ **/*
+
+
+
+ ${basedir}/../org.xtext.udb.ui.tests/src-gen/
+
+ **/*
+
+
+
+ ${basedir}/model/generated/
+
+
+
+
+
+
+
+
diff --git a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/GenerateIdl.mwe2 b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/GenerateUdb.mwe2
similarity index 89%
rename from tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/GenerateIdl.mwe2
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/GenerateUdb.mwe2
index 91475429f0..4fa6e42ab9 100644
--- a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/GenerateIdl.mwe2
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/GenerateUdb.mwe2
@@ -1,4 +1,4 @@
-module org.riscv.idl.GenerateIdl
+module org.xtext.example.udb.GenerateUdb
import org.eclipse.xtext.xtext.generator.*
import org.eclipse.xtext.xtext.generator.model.project.*
@@ -6,11 +6,11 @@ import org.eclipse.xtext.xtext.generator.model.project.*
var rootPath = ".."
Workflow {
-
+
component = XtextGenerator {
configuration = {
project = StandardProjectConfig {
- baseName = "org.riscv.idl"
+ baseName = "org.xtext.udb"
rootPath = rootPath
runtimeTest = {
enabled = true
@@ -31,8 +31,8 @@ Workflow {
}
}
language = StandardLanguage {
- name = "org.riscv.idl.Idl"
- fileExtensions = "idl"
+ name = "org.xtext.example.udb.Udb"
+ fileExtensions = "udb"
serializer = {
generateStub = false
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/UDBValueConverterService.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/UDBValueConverterService.java
new file mode 100644
index 0000000000..64ca2dd237
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/UDBValueConverterService.java
@@ -0,0 +1,45 @@
+package org.xtext.example.udb;
+
+import org.eclipse.xtext.common.services.DefaultTerminalConverters;
+import org.eclipse.xtext.conversion.IValueConverter;
+import org.eclipse.xtext.conversion.ValueConverter;
+import org.eclipse.xtext.conversion.ValueConverterException;
+import org.eclipse.xtext.nodemodel.INode;
+
+public class UDBValueConverterService extends DefaultTerminalConverters {
+
+ /**
+ * INT converter for hex digits
+ */
+ @ValueConverter(rule = "INT")
+ public IValueConverter INT() {
+ return new IValueConverter() {
+
+ @Override
+ public Integer toValue(String string, INode node) throws ValueConverterException {
+ if (string == null) {
+ return null;
+ }
+ try {
+ // remove underscores
+ String normalized = string.replace("_", "");
+
+ if (normalized.startsWith("0x") || normalized.startsWith("0X")) {
+ // parse as hex
+ return Integer.parseUnsignedInt(normalized.substring(2), 16);
+ } else {
+ // parse as decimal
+ return Integer.parseInt(normalized);
+ }
+ } catch (NumberFormatException e) {
+ throw new ValueConverterException("Invalid integer literal: " + string, node, e);
+ }
+ }
+
+ @Override
+ public String toString(Integer value) {
+ return value.toString();
+ }
+ };
+ }
+}
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/Udb.xtext b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/Udb.xtext
new file mode 100644
index 0000000000..ef44218873
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/Udb.xtext
@@ -0,0 +1,21 @@
+grammar org.xtext.example.udb.Udb with org.eclipse.xtext.common.Terminals
+
+generate udb "http://www.xtext.org/example/udb/Udb"
+
+Model:
+ csrs += Csr*;
+
+/* Taken from Ajit */
+Csr:
+ 'csr' name=ID
+ description=STRING
+ address=HEX
+ reset_value=STRING
+ ';';
+
+/* Terminals */
+terminal HEX:
+ ('0x' | '0X')
+ ('0'..'9' | 'A'..'F' | 'a'..'f')
+ (('0'..'9' | 'A'..'F' | 'a'..'f' | '_')*('0'..'9' | 'A'..'F' | 'a'..'f'))?
+;
\ No newline at end of file
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/UdbRuntimeModule.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/UdbRuntimeModule.java
new file mode 100644
index 0000000000..67c71c420f
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/UdbRuntimeModule.java
@@ -0,0 +1,15 @@
+/*
+ * generated by Xtext 2.39.0
+ */
+package org.xtext.example.udb;
+
+
+/**
+ * Use this class to register components to be used at runtime / without the Equinox extension registry.
+ */
+public class UdbRuntimeModule extends AbstractUdbRuntimeModule {
+ @Override
+ public Class extends org.eclipse.xtext.conversion.IValueConverterService> bindIValueConverterService() {
+ return org.xtext.example.udb.UDBValueConverterService.class;
+ }
+}
diff --git a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/IdlStandaloneSetup.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/UdbStandaloneSetup.java
similarity index 53%
rename from tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/IdlStandaloneSetup.java
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/UdbStandaloneSetup.java
index 8c426049cf..45c9d0524c 100644
--- a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/IdlStandaloneSetup.java
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/UdbStandaloneSetup.java
@@ -1,15 +1,15 @@
/*
* generated by Xtext 2.39.0
*/
-package org.riscv.idl;
+package org.xtext.example.udb;
/**
* Initialization support for running Xtext languages without Equinox extension registry.
*/
-public class IdlStandaloneSetup extends IdlStandaloneSetupGenerated {
+public class UdbStandaloneSetup extends UdbStandaloneSetupGenerated {
public static void doSetup() {
- new IdlStandaloneSetup().createInjectorAndDoEMFRegistration();
+ new UdbStandaloneSetup().createInjectorAndDoEMFRegistration();
}
}
diff --git a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/generator/IdlGenerator.xtend b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/generator/UdbGenerator.xtend
similarity index 53%
rename from tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/generator/IdlGenerator.xtend
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/generator/UdbGenerator.xtend
index 6aaeb28bf2..3b9ed921ca 100644
--- a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/generator/IdlGenerator.xtend
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/generator/UdbGenerator.xtend
@@ -1,30 +1,25 @@
/*
* generated by Xtext 2.39.0
*/
-package org.riscv.idl.generator
+package org.xtext.example.udb.generator
import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.xtext.generator.AbstractGenerator
import org.eclipse.xtext.generator.IFileSystemAccess2
import org.eclipse.xtext.generator.IGeneratorContext
-import org.riscv.idl.idl.Csr
-import java.util.Arrays
/**
* Generates code from your model files on save.
- *
+ *
* See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#code-generation
*/
-class IdlGenerator extends AbstractGenerator {
+class UdbGenerator extends AbstractGenerator {
override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) {
- val csv_file = resource.URI.lastSegment.replace(".idl", ".csv")
- fsa.generateFile(csv_file,
- 'address, name, reset_value, description' + '\n' +
- resource.allContents
- .filter(Csr)
- .map[String.join(', ',
- Arrays.asList(address, name, reset_value, description))]
- .join('\n'))
+// fsa.generateFile('greetings.txt', 'People to greet: ' +
+// resource.allContents
+// .filter(Greeting)
+// .map[name]
+// .join(', '))
}
}
diff --git a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/scoping/IdlScopeProvider.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/scoping/UdbScopeProvider.java
similarity index 66%
rename from tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/scoping/IdlScopeProvider.java
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/scoping/UdbScopeProvider.java
index 7c7ceb92e0..b3cd2c9125 100644
--- a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/scoping/IdlScopeProvider.java
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/scoping/UdbScopeProvider.java
@@ -1,15 +1,15 @@
/*
* generated by Xtext 2.39.0
*/
-package org.riscv.idl.scoping;
+package org.xtext.example.udb.scoping;
/**
* This class contains custom scoping description.
- *
+ *
* See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping
* on how and when to use it.
*/
-public class IdlScopeProvider extends AbstractIdlScopeProvider {
+public class UdbScopeProvider extends AbstractUdbScopeProvider {
}
diff --git a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/validation/IdlValidator.java b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/validation/UdbValidator.java
similarity index 68%
rename from tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/validation/IdlValidator.java
rename to tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/validation/UdbValidator.java
index 05d0492c5c..9286128f0f 100644
--- a/tools/eclipse/dev/org.riscv.idl/src/org/riscv/idl/validation/IdlValidator.java
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/src/org/xtext/example/udb/validation/UdbValidator.java
@@ -1,25 +1,25 @@
/*
* generated by Xtext 2.39.0
*/
-package org.riscv.idl.validation;
+package org.xtext.example.udb.validation;
/**
- * This class contains custom validation rules.
+ * This class contains custom validation rules.
*
* See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation
*/
-public class IdlValidator extends AbstractIdlValidator {
-
+public class UdbValidator extends AbstractUdbValidator {
+
// public static final String INVALID_NAME = "invalidName";
//
// @Check
// public void checkGreetingStartsWithCapital(Greeting greeting) {
// if (!Character.isUpperCase(greeting.getName().charAt(0))) {
// warning("Name should start with a capital",
-// IdlPackage.Literals.GREETING__NAME,
+// UdbPackage.Literals.GREETING__NAME,
// INVALID_NAME);
// }
// }
-
+
}
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/MANIFEST.MF b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/MANIFEST.MF
new file mode 100644
index 0000000000..22545365d3
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/MANIFEST.MF
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: org.xtext.udb
+Bundle-ManifestVersion: 2
+Bundle-Name: org.xtext.udb
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.202510230637
+Bundle-SymbolicName: org.xtext.udb; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.xtext,org.eclipse.xtext.xbase,org.eclipse.eq
+ uinox.common;bundle-version="3.19.0",org.eclipse.emf.ecore,org.eclipse.
+ emf.common,org.antlr.runtime;bundle-version="[3.2.0,3.2.1)",org.aopalli
+ ance;bundle-version="1.0.0",org.bndtools.headless.build.plugin.gradle;b
+ undle-version="7.1.0",io.github.classgraph.classgraph;bundle-version="4
+ .8.179",org.eclipse.xtext.xbase.lib.source;bundle-version="2.39.0",org.
+ eclipse.xtext.xbase.lib;bundle-version="2.39.0"
+Export-Package: org.xtext.example.udb.parser.antlr,org.xtext.example.udb
+ .udb.impl,org.xtext.example.udb.parser.antlr.internal,org.xtext.example
+ .udb.scoping,org.xtext.example.udb.generator,org.xtext.example.udb.serv
+ ices,org.xtext.example.udb.udb,org.xtext.example.udb.udb.util,org.xtext
+ .example.udb.validation,org.xtext.example.udb.serializer,org.xtext.exam
+ ple.udb
+Import-Package: org.apache.log4j
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=21))"
+
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/classes/org/xtext/example/udb/GenerateUdb.mwe2 b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/classes/org/xtext/example/udb/GenerateUdb.mwe2
new file mode 100644
index 0000000000..4fa6e42ab9
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/classes/org/xtext/example/udb/GenerateUdb.mwe2
@@ -0,0 +1,57 @@
+module org.xtext.example.udb.GenerateUdb
+
+import org.eclipse.xtext.xtext.generator.*
+import org.eclipse.xtext.xtext.generator.model.project.*
+
+var rootPath = ".."
+
+Workflow {
+
+ component = XtextGenerator {
+ configuration = {
+ project = StandardProjectConfig {
+ baseName = "org.xtext.udb"
+ rootPath = rootPath
+ runtimeTest = {
+ enabled = true
+ }
+ eclipsePlugin = {
+ enabled = true
+ }
+ eclipsePluginTest = {
+ enabled = true
+ }
+ createEclipseMetaData = true
+ }
+ code = {
+ encoding = "UTF-8"
+ lineDelimiter = "\n"
+ fileHeader = "/*\n * generated by Xtext \${version}\n */"
+ preferXtendStubs = false
+ }
+ }
+ language = StandardLanguage {
+ name = "org.xtext.example.udb.Udb"
+ fileExtensions = "udb"
+
+ serializer = {
+ generateStub = false
+ }
+ validator = {
+ // composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
+
+ // Enables several checks on the inferred Jvm model for Xbase languages concerning Java inheritance relations
+ // composedCheck = "org.eclipse.xtext.xbase.validation.JvmGenericTypeValidator"
+
+ // Generates checks for @Deprecated grammar annotations, an IssueProvider and a corresponding PropertyPage
+ generateDeprecationValidation = true
+ }
+ generator = {
+ generateXtendStub = true
+ }
+ junitSupport = {
+ junitVersion = "5"
+ }
+ }
+ }
+}
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/classes/org/xtext/example/udb/Udb.xtext b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/classes/org/xtext/example/udb/Udb.xtext
new file mode 100644
index 0000000000..ef44218873
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/classes/org/xtext/example/udb/Udb.xtext
@@ -0,0 +1,21 @@
+grammar org.xtext.example.udb.Udb with org.eclipse.xtext.common.Terminals
+
+generate udb "http://www.xtext.org/example/udb/Udb"
+
+Model:
+ csrs += Csr*;
+
+/* Taken from Ajit */
+Csr:
+ 'csr' name=ID
+ description=STRING
+ address=HEX
+ reset_value=STRING
+ ';';
+
+/* Terminals */
+terminal HEX:
+ ('0x' | '0X')
+ ('0'..'9' | 'A'..'F' | 'a'..'f')
+ (('0'..'9' | 'A'..'F' | 'a'..'f' | '_')*('0'..'9' | 'A'..'F' | 'a'..'f'))?
+;
\ No newline at end of file
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/maven-archiver/pom.properties b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/maven-archiver/pom.properties
new file mode 100644
index 0000000000..d37d46d10f
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=org.xtext.udb
+groupId=org.xtext.udb
+version=1.0.0-SNAPSHOT
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/org.xtext.udb-1.0.0-SNAPSHOT.jar b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/org.xtext.udb-1.0.0-SNAPSHOT.jar
new file mode 100644
index 0000000000..80c92aee74
Binary files /dev/null and b/tools/eclipse/dev/org.xtext.udb.parent/org.xtext.udb/target/org.xtext.udb-1.0.0-SNAPSHOT.jar differ
diff --git a/tools/eclipse/dev/org.xtext.udb.parent/pom.xml b/tools/eclipse/dev/org.xtext.udb.parent/pom.xml
new file mode 100644
index 0000000000..019881ab82
--- /dev/null
+++ b/tools/eclipse/dev/org.xtext.udb.parent/pom.xml
@@ -0,0 +1,265 @@
+
+ 4.0.0
+ org.xtext.udb
+ 1.0.0-SNAPSHOT
+ org.xtext.udb.parent
+ pom
+
+
+ 2.39.0
+ 2.22.0
+ UTF-8
+ 21
+ 21
+
+ 4.0.12
+
+
+
+
+
+
+
+ org.xtext.udb
+ org.xtext.udb.ide
+ org.xtext.udb.ui
+ org.xtext.udb.target
+ org.xtext.udb.tests
+ org.xtext.udb.ui.tests
+
+
+
+
+ org.eclipse.xtext
+ xtext-dev-bom
+ ${xtextVersion}
+ pom
+ import
+
+
+
+
+
+
+ org.eclipse.tycho
+ tycho-maven-plugin
+ ${tycho-version}
+ true
+
+
+ org.eclipse.tycho
+ target-platform-configuration
+ ${tycho-version}
+
+
+
+ org.xtext.udb
+ org.xtext.udb.target
+ ${project.version}
+
+
+
+
+ macosx
+ cocoa
+ x86_64
+
+
+ win32
+ win32
+ x86_64
+
+
+ linux
+ gtk
+ x86_64
+
+
+
+
+
+ eclipse-plugin
+ org.eclipse.xtext.logging
+ 0.0.0
+
+
+
+ eclipse-feature
+ org.eclipse.rcp
+ 0.0.0
+
+
+
+
+
+
+
+
+
+ org.eclipse.xtend
+ xtend-maven-plugin
+ ${xtextVersion}
+
+
+
+ compile
+ xtend-install-debug-info
+ testCompile
+ xtend-test-install-debug-info
+
+
+
+
+ ${basedir}/xtend-gen
+
+
+
+ org.apache.maven.plugins
+ maven-clean-plugin
+ 3.2.0
+
+
+
+ ${basedir}/xtend-gen
+
+ **/*
+
+
+
+
+
+
+
+ org.eclipse.tycho
+ tycho-compiler-plugin
+ ${tycho-version}
+
+ -err:-forbidden
+ false
+
+
+
+
+ org.eclipse.tycho
+ tycho-surefire-plugin
+ ${tycho-version}
+
+
+ ${platformSystemProperties} ${systemProperties} ${moduleProperties} ${additionalTestArguments}
+ false
+ false
+
+
+
+
+
+
+
+ codehaus-snapshots
+ disable dead 'Codehaus Snapshots' repository, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=481478
+ http://nexus.codehaus.org/snapshots/
+
+ false
+
+
+ false
+
+
+
+
+ ossrh-snapshots
+ ossrh-snapshots
+
+ false
+
+
+ false
+
+ http://oss.sonatype.org/content/repositories/snapshots
+
+
+
+ sonatype-nexus-snapshots
+ Sonatype Nexus Snapshots
+ https://oss.sonatype.org/content/repositories/snapshots
+
+ false
+
+
+ false
+
+
+
+
+
+ codehaus-snapshots
+ disable dead 'Codehaus Snapshots' repository, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=481478
+ http://nexus.codehaus.org/snapshots/
+
+ false
+
+
+ false
+
+
+
+ ossrh-snapshots
+ ossrh-snapshots
+
+ false
+
+
+ false
+
+ http://oss.sonatype.org/content/repositories/snapshots
+
+
+ sonatype-nexus-snapshots
+ Sonatype Nexus Snapshots
+ https://oss.sonatype.org/content/repositories/snapshots
+
+ false
+
+
+ false
+
+
+
+
+
+ macos
+
+
+ mac
+
+
+
+
+ -XstartOnFirstThread
+
+
+
+ jdk9-or-newer
+
+ [9,)
+
+
+ --add-modules=ALL-SYSTEM
+
+
+
+
+
+
+
diff --git a/udb-ls/.gradle/8.7/checksums/checksums.lock b/udb-ls/.gradle/8.7/checksums/checksums.lock
new file mode 100644
index 0000000000..56704683f1
Binary files /dev/null and b/udb-ls/.gradle/8.7/checksums/checksums.lock differ
diff --git a/udb-ls/.gradle/8.7/checksums/md5-checksums.bin b/udb-ls/.gradle/8.7/checksums/md5-checksums.bin
new file mode 100644
index 0000000000..68653606de
Binary files /dev/null and b/udb-ls/.gradle/8.7/checksums/md5-checksums.bin differ
diff --git a/udb-ls/.gradle/8.7/checksums/sha1-checksums.bin b/udb-ls/.gradle/8.7/checksums/sha1-checksums.bin
new file mode 100644
index 0000000000..8501ece000
Binary files /dev/null and b/udb-ls/.gradle/8.7/checksums/sha1-checksums.bin differ
diff --git a/udb-ls/.gradle/8.7/dependencies-accessors/gc.properties b/udb-ls/.gradle/8.7/dependencies-accessors/gc.properties
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/udb-ls/.gradle/8.7/executionHistory/executionHistory.bin b/udb-ls/.gradle/8.7/executionHistory/executionHistory.bin
new file mode 100644
index 0000000000..2516880993
Binary files /dev/null and b/udb-ls/.gradle/8.7/executionHistory/executionHistory.bin differ
diff --git a/udb-ls/.gradle/8.7/executionHistory/executionHistory.lock b/udb-ls/.gradle/8.7/executionHistory/executionHistory.lock
new file mode 100644
index 0000000000..0394995473
Binary files /dev/null and b/udb-ls/.gradle/8.7/executionHistory/executionHistory.lock differ
diff --git a/udb-ls/.gradle/8.7/fileChanges/last-build.bin b/udb-ls/.gradle/8.7/fileChanges/last-build.bin
new file mode 100644
index 0000000000..f76dd238ad
Binary files /dev/null and b/udb-ls/.gradle/8.7/fileChanges/last-build.bin differ
diff --git a/udb-ls/.gradle/8.7/fileHashes/fileHashes.bin b/udb-ls/.gradle/8.7/fileHashes/fileHashes.bin
new file mode 100644
index 0000000000..3b38ffcfdf
Binary files /dev/null and b/udb-ls/.gradle/8.7/fileHashes/fileHashes.bin differ
diff --git a/udb-ls/.gradle/8.7/fileHashes/fileHashes.lock b/udb-ls/.gradle/8.7/fileHashes/fileHashes.lock
new file mode 100644
index 0000000000..1e10695bd4
Binary files /dev/null and b/udb-ls/.gradle/8.7/fileHashes/fileHashes.lock differ
diff --git a/udb-ls/.gradle/8.7/fileHashes/resourceHashesCache.bin b/udb-ls/.gradle/8.7/fileHashes/resourceHashesCache.bin
new file mode 100644
index 0000000000..ddb3199fee
Binary files /dev/null and b/udb-ls/.gradle/8.7/fileHashes/resourceHashesCache.bin differ
diff --git a/udb-ls/.gradle/8.7/gc.properties b/udb-ls/.gradle/8.7/gc.properties
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/udb-ls/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/udb-ls/.gradle/buildOutputCleanup/buildOutputCleanup.lock
new file mode 100644
index 0000000000..c3c162094c
Binary files /dev/null and b/udb-ls/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/udb-ls/.gradle/buildOutputCleanup/cache.properties b/udb-ls/.gradle/buildOutputCleanup/cache.properties
new file mode 100644
index 0000000000..749c833d00
--- /dev/null
+++ b/udb-ls/.gradle/buildOutputCleanup/cache.properties
@@ -0,0 +1,2 @@
+#Sat Sep 27 15:00:51 PDT 2025
+gradle.version=8.7
diff --git a/udb-ls/.gradle/buildOutputCleanup/outputFiles.bin b/udb-ls/.gradle/buildOutputCleanup/outputFiles.bin
new file mode 100644
index 0000000000..913ed79984
Binary files /dev/null and b/udb-ls/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/udb-ls/.gradle/file-system.probe b/udb-ls/.gradle/file-system.probe
new file mode 100644
index 0000000000..d1077aaa31
Binary files /dev/null and b/udb-ls/.gradle/file-system.probe differ
diff --git a/udb-ls/.gradle/vcs-1/gc.properties b/udb-ls/.gradle/vcs-1/gc.properties
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/udb-ls/build.gradle b/udb-ls/build.gradle
new file mode 100644
index 0000000000..a89eefb6cf
--- /dev/null
+++ b/udb-ls/build.gradle
@@ -0,0 +1,40 @@
+plugins {
+ id 'java'
+ id 'application'
+ id 'com.github.johnrengelman.shadow' version '8.1.1'
+}
+
+repositories { mavenCentral() }
+
+ext {
+ xtextVersion = '2.40.0' // matches your workspace
+}
+
+dependencies {
+ // Your DSL code exported from Eclipse
+ implementation fileTree(dir: 'lib', include: ['org.xtext.udb*.jar'])
+
+ // Xtext IDE APIs (pulls EMF, LSP4J, Guice transitively)
+ implementation "org.eclipse.xtext:org.eclipse.xtext.ide:${xtextVersion}"
+
+ // If your DSL uses Xbase, keep this; otherwise remove it
+ implementation "org.eclipse.xtext:org.eclipse.xtext.xbase.ide:${xtextVersion}"
+
+ // These solved your earlier NoClassDefFoundErrors
+ implementation "io.github.classgraph:classgraph:4.8.180"
+ implementation "aopalliance:aopalliance:1.0"
+}
+
+application {
+ mainClass = "org.eclipse.xtext.ide.server.ServerLauncher"
+}
+
+java {
+ toolchain { languageVersion = JavaLanguageVersion.of(17) } // or 21 if you prefer
+}
+
+tasks.shadowJar {
+ archiveClassifier.set('all')
+ mergeServiceFiles() // keep META-INF/services for Xtext/Guice
+ // Do NOT call minimize() until everything works
+}
diff --git a/udb-ls/build/libs/udb-ls-all.jar b/udb-ls/build/libs/udb-ls-all.jar
new file mode 100644
index 0000000000..0072b8246e
Binary files /dev/null and b/udb-ls/build/libs/udb-ls-all.jar differ
diff --git a/udb-ls/build/tmp/shadowJar/MANIFEST.MF b/udb-ls/build/tmp/shadowJar/MANIFEST.MF
new file mode 100644
index 0000000000..6996ab502b
--- /dev/null
+++ b/udb-ls/build/tmp/shadowJar/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: org.eclipse.xtext.ide.server.ServerLauncher
+
diff --git a/udb-ls/gradle/wrapper/gradle-wrapper.jar b/udb-ls/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000..e6441136f3
Binary files /dev/null and b/udb-ls/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/udb-ls/gradle/wrapper/gradle-wrapper.properties b/udb-ls/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000..b82aa23a4f
--- /dev/null
+++ b/udb-ls/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,7 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/udb-ls/gradlew b/udb-ls/gradlew
new file mode 100755
index 0000000000..1aa94a4269
--- /dev/null
+++ b/udb-ls/gradlew
@@ -0,0 +1,249 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/udb-ls/gradlew.bat b/udb-ls/gradlew.bat
new file mode 100644
index 0000000000..7101f8e467
--- /dev/null
+++ b/udb-ls/gradlew.bat
@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/udb-ls/lib/org.xtext.udb.ide_1.0.0.202509271446.jar b/udb-ls/lib/org.xtext.udb.ide_1.0.0.202509271446.jar
new file mode 100644
index 0000000000..8a34564fe6
Binary files /dev/null and b/udb-ls/lib/org.xtext.udb.ide_1.0.0.202509271446.jar differ
diff --git a/udb-ls/lib/org.xtext.udb_1.0.0.202509271446.jar b/udb-ls/lib/org.xtext.udb_1.0.0.202509271446.jar
new file mode 100644
index 0000000000..b449d9c14b
Binary files /dev/null and b/udb-ls/lib/org.xtext.udb_1.0.0.202509271446.jar differ
diff --git a/udb-ls/settings.gradle b/udb-ls/settings.gradle
new file mode 100644
index 0000000000..7e6686207d
--- /dev/null
+++ b/udb-ls/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = "udb-ls"
diff --git a/udb-vscode/.vscode/launch.json b/udb-vscode/.vscode/launch.json
new file mode 100644
index 0000000000..a142310519
--- /dev/null
+++ b/udb-vscode/.vscode/launch.json
@@ -0,0 +1,13 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Run Extension",
+ "type": "extensionHost",
+ "request": "launch",
+ "args": ["--extensionDevelopmentPath=${workspaceFolder}"],
+ "outFiles": ["${workspaceFolder}/out/**/*.js"],
+ "preLaunchTask": "npm: compile"
+ }
+ ]
+}
diff --git a/udb-vscode/language-configuration.json b/udb-vscode/language-configuration.json
new file mode 100644
index 0000000000..0561a9837c
--- /dev/null
+++ b/udb-vscode/language-configuration.json
@@ -0,0 +1,10 @@
+{
+ "comments": { "lineComment": "//" },
+ "brackets": [["{","}"],["[","]"],["(",")"]],
+ "autoClosingPairs": [
+ { "open": "\"", "close": "\"" },
+ { "open": "(", "close": ")" },
+ { "open": "[", "close": "]" },
+ { "open": "{", "close": "}" }
+ ]
+}
diff --git a/udb-vscode/out/extension.js b/udb-vscode/out/extension.js
new file mode 100644
index 0000000000..57102a835d
--- /dev/null
+++ b/udb-vscode/out/extension.js
@@ -0,0 +1,63 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || (function () {
+ var ownKeys = function(o) {
+ ownKeys = Object.getOwnPropertyNames || function (o) {
+ var ar = [];
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+ return ar;
+ };
+ return ownKeys(o);
+ };
+ return function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+ __setModuleDefault(result, mod);
+ return result;
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.activate = activate;
+exports.deactivate = deactivate;
+const cp = __importStar(require("child_process"));
+const vscode = __importStar(require("vscode"));
+const node_1 = require("vscode-languageclient/node");
+let client;
+async function activate(ctx) {
+ const chan = vscode.window.createOutputChannel('UDB Language Server');
+ const java = vscode.workspace.getConfiguration('udb').get('javaPath') || 'java';
+ const jar = ctx.asAbsolutePath('server/udb-ls-all.jar');
+ const serverOptions = async () => {
+ chan.appendLine(`Launching: ${java} -jar ${jar} -stdio`);
+ const proc = cp.spawn(java, ['-jar', jar, '-stdio'], { cwd: ctx.extensionPath });
+ proc.on('error', (e) => chan.appendLine(`spawn error: ${String(e)}`));
+ proc.on('exit', (code, sig) => chan.appendLine(`server exit code=${code} signal=${sig}`));
+ proc.stderr.on('data', d => chan.appendLine(String(d)));
+ // optional if you want to see server stdout too:
+ // proc.stdout.on('data', d => chan.appendLine('[LS] ' + String(d)));
+ return { reader: proc.stdout, writer: proc.stdin };
+ };
+ const clientOptions = {
+ documentSelector: [{ language: 'udb', scheme: 'file' }],
+ };
+ client = new node_1.LanguageClient('udb', 'UDB Language Server', serverOptions, clientOptions);
+ await client.start();
+}
+async function deactivate() { if (client)
+ await client.stop(); }
diff --git a/udb-vscode/package-lock.json b/udb-vscode/package-lock.json
new file mode 100644
index 0000000000..aee6497433
--- /dev/null
+++ b/udb-vscode/package-lock.json
@@ -0,0 +1,1605 @@
+{
+ "name": "udb-vscode",
+ "version": "0.0.1",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "udb-vscode",
+ "version": "0.0.1",
+ "dependencies": {
+ "vscode-languageclient": "^9.0.1"
+ },
+ "devDependencies": {
+ "@types/glob": "^8.1.0",
+ "@types/mocha": "^10.0.10",
+ "@types/node": "^20.19.17",
+ "@types/vscode": "^1.104.0",
+ "@vscode/test-electron": "^2.5.2",
+ "glob": "^7.2.3",
+ "mocha": "^10.4.0",
+ "typescript": "^5.9.2"
+ },
+ "engines": {
+ "vscode": "^1.90.0"
+ }
+ },
+ "node_modules/@types/glob": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/minimatch": "^5.1.2",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/minimatch": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/mocha": {
+ "version": "10.0.10",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz",
+ "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "20.19.17",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.17.tgz",
+ "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@types/vscode": {
+ "version": "1.104.0",
+ "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.104.0.tgz",
+ "integrity": "sha512-0KwoU2rZ2ecsTGFxo4K1+f+AErRsYW0fsp6A0zufzGuhyczc2IoKqYqcwXidKXmy2u8YB2GsYsOtiI9Izx3Tig==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vscode/test-electron": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.5.2.tgz",
+ "integrity": "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.5",
+ "jszip": "^3.10.1",
+ "ora": "^8.1.0",
+ "semver": "^7.6.2"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
+ "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "restore-cursor": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-spinners": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/diff": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+ "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz",
+ "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-east-asian-width": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz",
+ "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-interactive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
+ "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
+ "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jszip": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+ "dev": true,
+ "license": "(MIT OR GPL-3.0-or-later)",
+ "dependencies": {
+ "lie": "~3.3.0",
+ "pako": "~1.0.2",
+ "readable-stream": "~2.3.6",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz",
+ "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "is-unicode-supported": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/is-unicode-supported": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
+ "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mimic-function": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
+ "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha": {
+ "version": "10.8.2",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
+ "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^4.1.3",
+ "browser-stdout": "^1.3.1",
+ "chokidar": "^3.5.3",
+ "debug": "^4.3.5",
+ "diff": "^5.2.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-up": "^5.0.0",
+ "glob": "^8.1.0",
+ "he": "^1.2.0",
+ "js-yaml": "^4.1.0",
+ "log-symbols": "^4.1.0",
+ "minimatch": "^5.1.6",
+ "ms": "^2.1.3",
+ "serialize-javascript": "^6.0.2",
+ "strip-json-comments": "^3.1.1",
+ "supports-color": "^8.1.1",
+ "workerpool": "^6.5.1",
+ "yargs": "^16.2.0",
+ "yargs-parser": "^20.2.9",
+ "yargs-unparser": "^2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha.js"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/mocha/node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/node_modules/glob": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/mocha/node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
+ "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-function": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz",
+ "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "cli-cursor": "^5.0.0",
+ "cli-spinners": "^2.9.2",
+ "is-interactive": "^2.0.0",
+ "is-unicode-supported": "^2.0.0",
+ "log-symbols": "^6.0.0",
+ "stdin-discarder": "^0.2.2",
+ "string-width": "^7.2.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "dev": true,
+ "license": "(MIT AND Zlib)"
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
+ "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^7.0.0",
+ "signal-exit": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/stdin-discarder": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz",
+ "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
+ "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-jsonrpc": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
+ "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/vscode-languageclient": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz",
+ "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==",
+ "license": "MIT",
+ "dependencies": {
+ "minimatch": "^5.1.0",
+ "semver": "^7.3.7",
+ "vscode-languageserver-protocol": "3.17.5"
+ },
+ "engines": {
+ "vscode": "^1.82.0"
+ }
+ },
+ "node_modules/vscode-languageserver-protocol": {
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
+ "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
+ "license": "MIT",
+ "dependencies": {
+ "vscode-jsonrpc": "8.2.0",
+ "vscode-languageserver-types": "3.17.5"
+ }
+ },
+ "node_modules/vscode-languageserver-types": {
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
+ "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
+ "license": "MIT"
+ },
+ "node_modules/workerpool": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
+ "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/udb-vscode/package.json b/udb-vscode/package.json
new file mode 100644
index 0000000000..bbe5963237
--- /dev/null
+++ b/udb-vscode/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "udb-vscode",
+ "version": "0.0.1",
+ "private": true,
+ "engines": {
+ "vscode": "^1.90.0"
+ },
+ "activationEvents": [],
+ "contributes": {
+ "languages": [
+ {
+ "id": "udb",
+ "aliases": [
+ "UDB"
+ ],
+ "extensions": [
+ ".udb"
+ ],
+ "configuration": "./language-configuration.json"
+ }
+ ],
+ "grammars": [
+ {
+ "language": "udb",
+ "scopeName": "source.udb",
+ "path": "./syntaxes/udb.tmLanguage.json"
+ }
+ ],
+ "configuration": {
+ "type": "object",
+ "title": "UDB",
+ "properties": {
+ "udb.javaPath": {
+ "type": "string",
+ "default": "java",
+ "description": "Path to the Java executable used to run the language server."
+ }
+ }
+ }
+ },
+ "main": "./out/extension.js",
+ "scripts": {
+ "compile": "tsc -p .",
+ "test": "npm run compile && node ./out/test/runTests.js",
+ "watch": "tsc -w",
+ "vscode:prepublish": "npm run compile"
+ },
+ "devDependencies": {
+ "@types/glob": "^8.1.0",
+ "@types/mocha": "^10.0.10",
+ "@types/node": "^20.19.17",
+ "@types/vscode": "^1.104.0",
+ "@vscode/test-electron": "^2.5.2",
+ "glob": "^7.2.3",
+ "mocha": "^10.4.0",
+ "typescript": "^5.9.2"
+ },
+ "dependencies": {
+ "vscode-languageclient": "^9.0.1"
+ }
+}
diff --git a/udb-vscode/server/udb-ls-all.jar b/udb-vscode/server/udb-ls-all.jar
new file mode 100644
index 0000000000..0072b8246e
Binary files /dev/null and b/udb-vscode/server/udb-ls-all.jar differ
diff --git a/udb-vscode/src/extension.d.ts b/udb-vscode/src/extension.d.ts
new file mode 100644
index 0000000000..9044413459
--- /dev/null
+++ b/udb-vscode/src/extension.d.ts
@@ -0,0 +1,4 @@
+import * as vscode from 'vscode';
+export declare function activate(ctx: vscode.ExtensionContext): Promise;
+export declare function deactivate(): Promise;
+//# sourceMappingURL=extension.d.ts.map
\ No newline at end of file
diff --git a/udb-vscode/src/extension.d.ts.map b/udb-vscode/src/extension.d.ts.map
new file mode 100644
index 0000000000..f4f5982f89
--- /dev/null
+++ b/udb-vscode/src/extension.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["extension.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAKjC,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,iBAgB1D;AAED,wBAAsB,UAAU,kBAAuC"}
\ No newline at end of file
diff --git a/udb-vscode/src/extension.js b/udb-vscode/src/extension.js
new file mode 100644
index 0000000000..d9af21a6ce
--- /dev/null
+++ b/udb-vscode/src/extension.js
@@ -0,0 +1,58 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || (function () {
+ var ownKeys = function(o) {
+ ownKeys = Object.getOwnPropertyNames || function (o) {
+ var ar = [];
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+ return ar;
+ };
+ return ownKeys(o);
+ };
+ return function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+ __setModuleDefault(result, mod);
+ return result;
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.activate = activate;
+exports.deactivate = deactivate;
+const cp = __importStar(require("child_process"));
+const vscode = __importStar(require("vscode"));
+const node_1 = require("vscode-languageclient/node");
+let client;
+async function activate(ctx) {
+ const java = vscode.workspace.getConfiguration('udb').get('javaPath') || 'java';
+ const jar = ctx.asAbsolutePath('server/udb-ls-all.jar');
+ const serverOptions = async () => {
+ const proc = cp.spawn(java, ['-jar', jar, '-stdio'], { cwd: ctx.extensionPath });
+ proc.stderr.on('data', d => console.error(String(d)));
+ return Promise.resolve({ reader: proc.stdout, writer: proc.stdin });
+ };
+ const clientOptions = {
+ documentSelector: [{ language: 'udb', scheme: 'file' }],
+ };
+ client = new node_1.LanguageClient('udb', 'UDB Language Server', serverOptions, clientOptions);
+ await client.start();
+}
+async function deactivate() { if (client)
+ await client.stop(); }
+//# sourceMappingURL=extension.js.map
\ No newline at end of file
diff --git a/udb-vscode/src/extension.js.map b/udb-vscode/src/extension.js.map
new file mode 100644
index 0000000000..319d67a0c5
--- /dev/null
+++ b/udb-vscode/src/extension.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"extension.js","sourceRoot":"","sources":["extension.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,4BAgBC;AAED,gCAAuE;AAxBvE,kDAAoC;AACpC,+CAAiC;AACjC,qDAA+F;AAE/F,IAAI,MAAsB,CAAC;AAEpB,KAAK,UAAU,QAAQ,CAAC,GAA4B;IACzD,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAS,UAAU,CAAC,IAAI,MAAM,CAAC;IACxF,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;IAExD,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC,OAAO,CAAa,EAAE,MAAM,EAAE,IAAI,CAAC,MAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAM,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC;IAEF,MAAM,aAAa,GAA0B;QAC3C,gBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;KACxD,CAAC;IAEF,MAAM,GAAG,IAAI,qBAAc,CAAC,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACxF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAEM,KAAK,UAAU,UAAU,KAAK,IAAI,MAAM;IAAE,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/udb-vscode/src/extension.ts b/udb-vscode/src/extension.ts
new file mode 100644
index 0000000000..048904a4a4
--- /dev/null
+++ b/udb-vscode/src/extension.ts
@@ -0,0 +1,33 @@
+import * as cp from 'child_process';
+import * as vscode from 'vscode';
+import { LanguageClient, LanguageClientOptions, StreamInfo } from 'vscode-languageclient/node';
+
+let client: LanguageClient;
+
+export async function activate(ctx: vscode.ExtensionContext) {
+ const chan = vscode.window.createOutputChannel('UDB Language Server');
+ const java = vscode.workspace.getConfiguration('udb').get('javaPath') || 'java';
+ const jar = ctx.asAbsolutePath('server/udb-ls-all.jar');
+
+ const serverOptions = async () => {
+ chan.appendLine(`Launching: ${java} -jar ${jar} -stdio`);
+ const proc = cp.spawn(java, ['-jar', jar, '-stdio'], { cwd: ctx.extensionPath });
+
+ proc.on('error', (e) => chan.appendLine(`spawn error: ${String(e)}`));
+ proc.on('exit', (code, sig) => chan.appendLine(`server exit code=${code} signal=${sig}`));
+ proc.stderr.on('data', d => chan.appendLine(String(d)));
+ // optional if you want to see server stdout too:
+ // proc.stdout.on('data', d => chan.appendLine('[LS] ' + String(d)));
+
+ return { reader: proc.stdout!, writer: proc.stdin! } as StreamInfo;
+ };
+
+ const clientOptions: LanguageClientOptions = {
+ documentSelector: [{ language: 'udb', scheme: 'file' }],
+ };
+
+ client = new LanguageClient('udb', 'UDB Language Server', serverOptions, clientOptions);
+ await client.start();
+}
+
+export async function deactivate() { if (client) await client.stop(); }
diff --git a/udb-vscode/src/test/runTests.ts b/udb-vscode/src/test/runTests.ts
new file mode 100644
index 0000000000..9800fc793a
--- /dev/null
+++ b/udb-vscode/src/test/runTests.ts
@@ -0,0 +1,21 @@
+import * as path from 'path';
+import { runTests } from '@vscode/test-electron';
+
+async function main() {
+ const extensionDevelopmentPath = path.resolve(__dirname, '../../');
+ const extensionTestsPath = path.resolve(__dirname, './suite/index');
+ const testWorkspace = path.resolve(__dirname, '../../test-fixtures');
+
+ await runTests({
+ extensionDevelopmentPath,
+ extensionTestsPath,
+ launchArgs: [
+ testWorkspace,
+ '--disable-extensions',
+ '--new-window',
+ path.join(extensionDevelopmentPath, 'test-fixtures') // workspace with .udb files
+ ]
+ });
+}
+
+main().catch(err => { console.error('Failed to run tests', err); process.exit(1); });
diff --git a/udb-vscode/src/test/suite/basic.test.ts b/udb-vscode/src/test/suite/basic.test.ts
new file mode 100644
index 0000000000..2e67f3a1e5
--- /dev/null
+++ b/udb-vscode/src/test/suite/basic.test.ts
@@ -0,0 +1,108 @@
+import * as assert from 'assert';
+import * as vscode from 'vscode';
+import * as path from 'path';
+
+// Build an absolute path inside the test workspace (opened via runTests.ts)
+function wsPath(...p: string[]) {
+ const root = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath!;
+ return path.join(root, ...p);
+}
+
+async function waitFor(probe: () => T | null | undefined | false, ms = 8000, step = 50) {
+ const start = Date.now();
+ while (Date.now() - start < ms) {
+ const v = probe();
+ if (v) return v;
+ await new Promise(r => setTimeout(r, step));
+ }
+ return undefined;
+}
+
+// Smoke test, test if language server starts up correctly and
+// it can distinguish between good and bad syntax.
+suite('UDB LS – smoke', () => {
+ test('initialize → diagnostics on open (real .udb file)', async () => {
+ const uri = vscode.Uri.file(wsPath('badHex.udb'));
+ let doc = await vscode.workspace.openTextDocument(uri);
+
+ // force the language in case association is missing.
+ if (doc.languageId !== 'udb') {
+ doc = await vscode.languages.setTextDocumentLanguage(doc, 'udb');
+ }
+ await vscode.window.showTextDocument(doc);
+
+
+ const edit = new vscode.WorkspaceEdit();
+ edit.insert(doc.uri, new vscode.Position(0, 0), ' ');
+ await vscode.workspace.applyEdit(edit);
+ await vscode.workspace.saveAll();
+
+ const revert = new vscode.WorkspaceEdit();
+ revert.delete(doc.uri, new vscode.Range(0, 0, 0, 1));
+ await vscode.workspace.applyEdit(revert);
+
+ const diags = await waitFor(() => {
+ const d = vscode.languages.getDiagnostics(doc.uri);
+ return d.length ? d : null;
+ }, 8000);
+
+ // Expect at least one diagnostic for the intentionally bad hex.
+ assert.ok(diags && diags.length >= 1, 'expected at least one diagnostic for bad hex in .udb file'); // should pass now but underscores still not fixed in this version
+ });
+
+ test('completion after keyword', async () => {
+ const doc = await vscode.workspace.openTextDocument({ language: 'udb', content: 'csr ' });
+ await vscode.window.showTextDocument(doc);
+ const pos = new vscode.Position(0, 4);
+
+ const list = await vscode.commands.executeCommand(
+ 'vscode.executeCompletionItemProvider', doc.uri, pos
+ );
+
+ assert.ok(list, 'completion list present');
+ assert.ok((list.items ?? []).length >= 1, 'expected some completions after "csr "');
+ });
+
+ test('hover returns content', async () => {
+ const doc = await vscode.workspace.openTextDocument({ language: 'udb', content: 'csr A "d" 0x1A_2F "0x00";' });
+ await vscode.window.showTextDocument(doc);
+ const col = doc.getText().indexOf('0x1A_2F') + 2;
+
+ const hovers = await vscode.commands.executeCommand(
+ 'vscode.executeHoverProvider', doc.uri, new vscode.Position(0, col)
+ );
+
+ assert.ok(hovers && hovers.length >= 0, 'hover provider responded');
+ });
+
+ // With no cross-refs, “go to definition” on a declaration may return self or nothing
+ test('definition (self or none with current grammar)', async () => {
+ const uri = vscode.Uri.file(wsPath('goodHex.udb'));
+ let doc = await vscode.workspace.openTextDocument(uri);
+ if (doc.languageId !== 'udb') {
+ doc = await vscode.languages.setTextDocumentLanguage(doc, 'udb');
+ }
+ await vscode.window.showTextDocument(doc);
+
+ const text = doc.getText();
+ const secondCTRL = text.indexOf('CTRL', text.indexOf('CTRL') + 1);
+ const pos = doc.positionAt(secondCTRL + 1);
+
+ const defs = await vscode.commands.executeCommand(
+ 'vscode.executeDefinitionProvider', doc.uri, pos
+ );
+
+ if (!defs || defs.length === 0) {
+ assert.ok(true);
+ return;
+ }
+ const here = new vscode.Range(
+ doc.positionAt(secondCTRL),
+ doc.positionAt(secondCTRL + 'CTRL'.length)
+ );
+ const self = defs.some(loc => loc.uri.toString() === doc.uri.toString() && !!loc.range.intersection(here));
+ assert.ok(self, 'expected no definition or a self-location on the declaration token');
+ });
+ // Pending on purpose, enable when the grammar has references and rename updates them.
+ //test.skip('rename (skip until rename/ref updates implemented)', () => {});
+});
diff --git a/udb-vscode/src/test/suite/index.ts b/udb-vscode/src/test/suite/index.ts
new file mode 100644
index 0000000000..142fdb2bf9
--- /dev/null
+++ b/udb-vscode/src/test/suite/index.ts
@@ -0,0 +1,21 @@
+import * as path from 'path';
+import Mocha = require('mocha');
+import glob = require('glob');
+
+export function run(): Promise {
+ const mocha = new Mocha({ ui: 'tdd', timeout: 20000 });
+ const testsRoot = path.resolve(__dirname);
+
+ const files: string[] = glob.sync('**/*.test.js', { cwd: testsRoot });
+ for (const f of files) {
+ mocha.addFile(path.resolve(testsRoot, f));
+ }
+
+ return new Promise((resolve, reject) => {
+ try {
+ mocha.run((failures: number) => failures ? reject(new Error(`${failures} tests failed`)) : resolve());
+ } catch (e) {
+ reject(e as Error);
+ }
+ });
+}
diff --git a/udb-vscode/syntaxes/udb.tmLanguage.json b/udb-vscode/syntaxes/udb.tmLanguage.json
new file mode 100644
index 0000000000..0b7c973615
--- /dev/null
+++ b/udb-vscode/syntaxes/udb.tmLanguage.json
@@ -0,0 +1,55 @@
+{
+ "name": "UDB",
+ "scopeName": "source.udb",
+ "patterns": [
+ { "include": "#keyword" },
+ { "include": "#string" },
+ { "include": "#hex" },
+ { "include": "#comment" },
+ { "include": "#ident" }
+ ],
+ "repository": {
+ "keyword": {
+ "patterns": [
+ { "name": "keyword.control.udb", "match": "\\bcsr\\b" }
+ ]
+ },
+ "string": {
+ "patterns": [
+ {
+ "name": "string.quoted.double.udb",
+ "begin": "\"",
+ "end": "\"",
+ "patterns": [
+ { "name": "constant.character.escape.udb", "match": "\\\\." }
+ ]
+ }
+ ]
+ },
+ "hex": {
+ "patterns": [
+ {
+ "name": "constant.numeric.hex.udb",
+ "match": "\\b0[xX][0-9A-Fa-f](?:[0-9A-Fa-f_]*[0-9A-Fa-f])?\\b"
+ },
+ {
+ "name": "invalid.illegal.numeric.hex.udb",
+ "match": "\\b0[xX](?:_[0-9A-Fa-f_]|[0-9A-Fa-f_]*_)\\b"
+ }
+ ]
+ },
+ "comment": {
+ "patterns": [
+ { "name": "comment.line.double-slash.udb", "match": "//.*$" }
+ ]
+ },
+ "ident": {
+ "patterns": [
+ {
+ "name": "entity.name.type.udb",
+ "match": "\\b[A-Za-z_][A-Za-z0-9_]*\\b"
+ }
+ ]
+ }
+ }
+}
diff --git a/udb-vscode/test-fixtures/badHex.udb b/udb-vscode/test-fixtures/badHex.udb
new file mode 100644
index 0000000000..4e7862fa5f
--- /dev/null
+++ b/udb-vscode/test-fixtures/badHex.udb
@@ -0,0 +1,2 @@
+ csr A "bad" 0x_10 "0x00";
+badhh
\ No newline at end of file
diff --git a/udb-vscode/test-fixtures/goodHex.udb b/udb-vscode/test-fixtures/goodHex.udb
new file mode 100644
index 0000000000..c753740e10
--- /dev/null
+++ b/udb-vscode/test-fixtures/goodHex.udb
@@ -0,0 +1,2 @@
+csr CTRL "c" 0x10 "0x00";
+csr CTRL "d" 0x11 "0x00";
diff --git a/udb-vscode/tsconfig.json b/udb-vscode/tsconfig.json
new file mode 100644
index 0000000000..2f95d047b2
--- /dev/null
+++ b/udb-vscode/tsconfig.json
@@ -0,0 +1,18 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "module": "commonjs",
+ "moduleResolution": "node",
+ "outDir": "out",
+ "rootDir": "src",
+ "strict": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "verbatimModuleSyntax": false,
+ "types": ["mocha", "node"],
+ "lib": ["ES2020", "DOM"]
+ },
+ "include": ["src/**/*.ts"]
+}
+
+