从 DSL 到 EMF Ecore 模型的交叉引用在 LSP 设置中不起作用

问题描述

我有一种 DSL 语言,我们需要交叉引用在单独文件中定义的 EAttribute。 这在 eclipse 插件设置中工作正常,但在基于 Vscode/theia 客户端的 LSP 设置中不起作用。

语法片段 -

Atomic returns Expression:
    {IntConstant} value=INT |
    {StringConstant} value=STRING |
    {BoolConstant} value=('true' | 'false') |
    {VariableRef} variable=[ecore::EAttribute|Qualifiedname];

示例 -

  1. DSL 文件 - test.mexpression
  iota=1
  1. iota 是一个在单独的文件中定义的变量 - variables.ecore
<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="vari" nsURI="vvvv" nsprefix="var">
<eClassifiers xsi:type="ecore:EClass" name="Variables">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="iota" eType="ecore:EDataType 
 http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="Cars" eType="ecore:EDataType 
http://www.eclipse.org/emf/2002/Ecore#//EString"
    defaultValueLiteral=""/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Car">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="Model" eType="ecore:EDataType 
http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
</ecore:EPackage>

语言客户端代码段 -

 export function activate(context: ExtensionContext) {
     // The server is a started as a separate app and listens on port 5007
     let connectionInfo = {
         port: 5008
     };
     let serverOptions = () => {
         // Connect to language server via socket
         let socket = net.connect(connectionInfo);
         let result: StreamInfo = {
             writer: socket,reader: socket
         };
         return Promise.resolve(result);
     };
     
     let clientOptions: LanguageClientOptions = {
         documentSelector: ['mexpression','ecore'],synchronize: {
             fileEvents: workspace.createFileSystemWatcher('**/*.*')
         }
     };
     
     // Create the language client and start the client.
     let lc = new LanguageClient('Xtext Server',serverOptions,clientOptions);

在这里遗漏了什么吗?或者我们必须为变量文件创建一个独立的设置并通过服务提供商注册它以使其在 LSP 环境中工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...