I have a VSCode Extension with a language server built with XText
The language server contains 2 grammars below is the mwe2 workflow
module de.bmw.rhmi.GenerateHmi
import org.eclipse.xtext.xtext.generator.*
import org.eclipse.xtext.xtext.generator.model.project.*
import org.eclipse.emf.mwe.utils.*
var rootPath = ".."
var projectName = "de.bmw.rhmi"
var grammarURI = "src/main/java/de/bmw/rhmi/Hmi.xtext"
var appGrammarURI = "src/main/java/de/bmw/rhmi/App.xtext"
var runtimeProject = "../${projectName}"
Workflow {
bean = StandaloneSetup {
scanClassPath = true
platformUri = "${rootPath}"
registerGenModelFile = "platform:/resource/de.bmw.rhmi.resource/model/generated/Strings.genmodel"
registerGenModelFile = "platform:/resource/de.bmw.rhmi.resource/model/Image.genmodel"
registerGeneratedEPackage = "de.bmw.rhmi.resource.image.ImagePackage"
registerGeneratedEPackage = "de.bmw.rhmi.resource.strings.StringsPackage"
}
component = DirectoryCleaner {
directory = "${runtimeProject}/xtext-gen"
}
component = XtextGenerator {
configuration = {
project = StandardProjectConfig {
baseName = "de.bmw.rhmi"
rootPath = rootPath
runtimeTest = {
enabled = true
}
genericIde = {
enabled = true
}
mavenLayout = true
}
code = {
encoding = "UTF-8"
lineDelimiter = "\n"
fileHeader = "/*\n * generated by Xtext \${version}\n */"
}
}
language = XtextGeneratorLanguage {
grammarUri = appGrammarURI
name = "de.bmw.rhmi.App"
fileExtensions = "rapp"
referencedResource = "platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel"
fragment = grammarAccess.GrammarAccessFragment2 {}
fragment = ecore.EMFGeneratorFragment2 {}
fragment = serializer.SerializerFragment2 {}
fragment = resourceFactory.ResourceFactoryFragment2 {}
fragment = parser.antlr.XtextAntlrGeneratorFragment2 {
options = {
classSplitting = true
fieldsPerClass = "500"
}
antlrParam = "-Xconversiontimeout" antlrParam = "10000"
}
fragment = validation.ValidatorFragment2 {}
fragment = scoping.ImportNamespacesScopingFragment2 {}
fragment = exporting.QualifiedNamesFragment2 {}
fragment = builder.BuilderIntegrationFragment2 {}
fragment = formatting.Formatter2Fragment2 {}
fragment = ui.labeling.LabelProviderFragment2 {}
fragment = ui.outline.QuickOutlineFragment2 {}
fragment = ui.outline.OutlineTreeProviderFragment2 {}
fragment = ui.quickfix.QuickfixProviderFragment2 {}
fragment = ui.contentAssist.ContentAssistFragment2 {}
fragment = junit.JUnitFragment {}
fragment = ui.refactoring.RefactorElementNameFragment2 {}
fragment = ui.templates.CodetemplatesGeneratorFragment2 {}
fragment = types.TypesGeneratorFragment2 {}
fragment = xbase.XtypeGeneratorFragment2 {}
fragment = xbase.XbaseGeneratorFragment2 {}
fragment = ui.compare.CompareFragment2 {}
fragment = idea.parser.antlr.XtextAntlrIDEAGeneratorFragment {}
fragment = ui.projectWizard.TemplateProjectWizardFragment {}
fragment = ui.fileWizard.TemplateFileWizardFragment {}
}
language = XtextGeneratorLanguage {
grammarUri = grammarURI
referencedResource = "platform:/resource/de.bmw.rhmi/src/main/java/de/bmw/rhmi/App.xtext"
name = "de.bmw.rhmi.Hmi"
fileExtensions = "hmi"
referencedResource = "platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel"
fragment = grammarAccess.GrammarAccessFragment2 {}
fragment = ecore.EMFGeneratorFragment2 {}
fragment = serializer.SerializerFragment2 {}
fragment = resourceFactory.ResourceFactoryFragment2 {}
fragment = parser.antlr.XtextAntlrGeneratorFragment2 {
options = {
classSplitting = true
fieldsPerClass = "500"
}
antlrParam = "-Xconversiontimeout" antlrParam = "10000"
}
fragment = validation.ValidatorFragment2 {}
fragment = scoping.ImportNamespacesScopingFragment2 {}
fragment = exporting.QualifiedNamesFragment2 {}
fragment = builder.BuilderIntegrationFragment2 {}
fragment = formatting.Formatter2Fragment2 {}
fragment = ui.labeling.LabelProviderFragment2 {}
fragment = ui.outline.QuickOutlineFragment2 {}
fragment = ui.outline.OutlineTreeProviderFragment2 {}
fragment = ui.quickfix.QuickfixProviderFragment2 {}
fragment = xbase.XtypeGeneratorFragment2 {}
fragment = xbase.XbaseGeneratorFragment2 {}
fragment = ui.contentAssist.ContentAssistFragment2 {}
fragment = junit.JUnitFragment {}
fragment = ui.refactoring.RefactorElementNameFragment2 {}
fragment = ui.templates.CodetemplatesGeneratorFragment2 {}
fragment = ui.compare.CompareFragment2 {}
fragment = ui.projectWizard.TemplateProjectWizardFragment {}
fragment = types.TypesGeneratorFragment2 {}
fragment = idea.parser.antlr.XtextAntlrIDEAGeneratorFragment {}
fragment = ui.fileWizard.TemplateFileWizardFragment {}
}
}
}
In my VsCode Extension, I have good content assist / code completion support for the second grammer (hmi) but no code completion support for the first grammer (app)
Here is the relevant part of the VS-Code Extension
"activationEvents": [
"onLanguage:hmi",
"onLanguage:rapp"
],
"main": "out/extension",
"contributes": {
"languages": [
{
"id": "hmi",
"aliases": [
"hmi"
],
"extensions": [
".hmi"
],
"configuration": "./language.configuration.json"
},
{
"id": "rapp",
"aliases": [
"rapp"
],
"extensions": [
".rapp"
],
"configuration": "./language-configuration.json"
}
],
"grammars": [
{
"language": "hmi",
"scopeName": "source.hmi",
"path": "./syntaxes/hmi.tmLanguage.json"
},
{
"language": "rapp",
"scopeName": "source.rapp",
"path": "./syntaxes/rapp.tmLanguage.json"
}
],
"commands": [
{
"command": "hmi.a.proxy",
"title": "Hmi Command A"
},
{
"command": "hmi.b",
"title": "Hmi Command B"
}
]
}
Validation and everything else is working for the rapp grammar, but not code completion. I think it has to do with my language server. What am I missing?