I have xtext grammar as below :
MyDSLModel:
(dmodel=DModel)
;
DModel:
{DModel}
(importSection=ImportSection)?
(
(groups+=Group) |
(variableDefinition+=VariableDefinition)
)*
;
ImportSection:
(importDeclarations+=Import)+
;
Import:
'import' importedNamespace=[DModel | ImportID]
;
ImportID:
ImportIdentifier(('.'|'/')ImportIdentifier)*
;
Group:
'group' name=Identifier
;
VariableDefinition:
'var' name=Identifier
;
ImportIdentifier:
Identifier
| 'dB'
| 'm'
| 'true' | 'false'
| 'parallel' | 'sequential'
| 'sites' | 'routing'
;
Identifier:
PortIdentifier
| 'mode'
| 'options'
;
PortIdentifier:
SINGLE_CHARACTER_ID | ID
| 'action'
| 'config'
| 'disabled'
| 'enum'
| 'extension'
| 'group'
| 'import'
| 'mod'
| 'set'
| 'setup'
;
terminal ID:
'^'?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')+
;
terminal SINGLE_CHARACTER_ID:
('a'..'z'|'A'..'Z'|'_')
;
Now, I have a file written using this grammar, which is as below :
import specification/FunctionalTIM.spec
import specification/FunctionalLEV.spec
import specification/FunctionalWVT.spec
group GR1
group GR2
var v1
var v2
I am trying to format this code with following implementation
public class MyDSLFormatter extends AbstractDeclarativeFormatter {
@Inject
private MyDSLGrammarAccess grammarAccess;
@Override
protected void configureFormatting(FormattingConfig c) {
ImportElements importAccess = grammarAccess.getImportAccess();
c.setLinewrap().after(importAccess.getRule());
GroupElements groupAccess = grammarAccess.getGroupAccess();
c.setLinewrap().after(groupAccess.getRule());
VariableDefinitionElements varDefAccess = grammarAccess
.getVariableDefinitionAccess();
c.setLinewrap().after(varDefAccess.getRule());
}
Now, the problem I am facing is, inconsistency in formatting, when Import elements are present in my file If my file has import statements in it, then the line wrap for VariableDefinition (after the rule) is not taking effect. So, CTRL+SHIFT+F gives file as
import specification/FunctionalTIM.spec
import specification/FunctionalLEV.spec
import specification/FunctionalWVT.spec
group GR1 group GR2 var v1 var v2
Note:
But If I am having only Group elements and VariableDefinition elements, then proper line wraps are getting inserted.
So, can anyone help, why this inconsistent behavior is observed? Thanks in advance!
[Updated on: Thu, 11 September 2014 09:33]
Report message to a moderator