Skip to content
Snippets Groups Projects
Commit 4d6787c3 authored by Nelson Tavares de Sousa's avatar Nelson Tavares de Sousa
Browse files

first working implementation of the autoformatter

parent 52e9c82c
Branches
No related tags found
No related merge requests found
Pipeline #
Showing
with 68 additions and 22 deletions
...@@ -49,6 +49,8 @@ import org.eclipse.xtext.ui.editor.contentassist.IProposalConflictHelper; ...@@ -49,6 +49,8 @@ import org.eclipse.xtext.ui.editor.contentassist.IProposalConflictHelper;
import org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher; import org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher;
import org.eclipse.xtext.ui.editor.contentassist.antlr.AntlrProposalConflictHelper; import org.eclipse.xtext.ui.editor.contentassist.antlr.AntlrProposalConflictHelper;
import org.eclipse.xtext.ui.editor.contentassist.antlr.DelegatingContentAssistContextFactory; import org.eclipse.xtext.ui.editor.contentassist.antlr.DelegatingContentAssistContextFactory;
import org.eclipse.xtext.ui.editor.formatting.IContentFormatterFactory;
import org.eclipse.xtext.ui.editor.formatting2.ContentFormatterFactory;
import org.eclipse.xtext.ui.editor.outline.IOutlineTreeProvider; import org.eclipse.xtext.ui.editor.outline.IOutlineTreeProvider;
import org.eclipse.xtext.ui.editor.outline.impl.IOutlineTreeStructureProvider; import org.eclipse.xtext.ui.editor.outline.impl.IOutlineTreeStructureProvider;
import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer; import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
...@@ -184,6 +186,11 @@ public abstract class AbstractConfigUiModule extends DefaultUiModule { ...@@ -184,6 +186,11 @@ public abstract class AbstractConfigUiModule extends DefaultUiModule {
.to(BuilderPreferenceAccess.Initializer.class); .to(BuilderPreferenceAccess.Initializer.class);
} }
// contributed by org.eclipse.xtext.xtext.generator.formatting.Formatter2Fragment2
public Class<? extends IContentFormatterFactory> bindIContentFormatterFactory() {
return ContentFormatterFactory.class;
}
// contributed by org.eclipse.xtext.xtext.generator.ui.labeling.LabelProviderFragment2 // contributed by org.eclipse.xtext.xtext.generator.ui.labeling.LabelProviderFragment2
public Class<? extends ILabelProvider> bindILabelProvider() { public Class<? extends ILabelProvider> bindILabelProvider() {
return ConfigLabelProvider.class; return ConfigLabelProvider.class;
......
No preview for this file type
...@@ -9,6 +9,9 @@ import com.google.inject.name.Names; ...@@ -9,6 +9,9 @@ import com.google.inject.name.Names;
import java.util.Properties; import java.util.Properties;
import org.eclipse.xtext.Constants; import org.eclipse.xtext.Constants;
import org.eclipse.xtext.IGrammarAccess; import org.eclipse.xtext.IGrammarAccess;
import org.eclipse.xtext.formatting2.FormatterPreferenceValuesProvider;
import org.eclipse.xtext.formatting2.FormatterPreferences;
import org.eclipse.xtext.formatting2.IFormatter2;
import org.eclipse.xtext.generator.IGenerator2; import org.eclipse.xtext.generator.IGenerator2;
import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider; import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider;
import org.eclipse.xtext.naming.IQualifiedNameProvider; import org.eclipse.xtext.naming.IQualifiedNameProvider;
...@@ -21,6 +24,7 @@ import org.eclipse.xtext.parser.antlr.ITokenDefProvider; ...@@ -21,6 +24,7 @@ import org.eclipse.xtext.parser.antlr.ITokenDefProvider;
import org.eclipse.xtext.parser.antlr.Lexer; import org.eclipse.xtext.parser.antlr.Lexer;
import org.eclipse.xtext.parser.antlr.LexerBindings; import org.eclipse.xtext.parser.antlr.LexerBindings;
import org.eclipse.xtext.parser.antlr.LexerProvider; import org.eclipse.xtext.parser.antlr.LexerProvider;
import org.eclipse.xtext.preferences.IPreferenceValuesProvider;
import org.eclipse.xtext.resource.IContainer; import org.eclipse.xtext.resource.IContainer;
import org.eclipse.xtext.resource.IResourceDescriptions; import org.eclipse.xtext.resource.IResourceDescriptions;
import org.eclipse.xtext.resource.containers.IAllContainersState; import org.eclipse.xtext.resource.containers.IAllContainersState;
...@@ -40,6 +44,7 @@ import org.eclipse.xtext.serializer.sequencer.ISemanticSequencer; ...@@ -40,6 +44,7 @@ import org.eclipse.xtext.serializer.sequencer.ISemanticSequencer;
import org.eclipse.xtext.serializer.sequencer.ISyntacticSequencer; import org.eclipse.xtext.serializer.sequencer.ISyntacticSequencer;
import org.eclipse.xtext.service.DefaultRuntimeModule; import org.eclipse.xtext.service.DefaultRuntimeModule;
import org.eclipse.xtext.service.SingletonBinding; import org.eclipse.xtext.service.SingletonBinding;
import teetime.configuration.dsl.formatting2.ConfigFormatter;
import teetime.configuration.dsl.generator.ConfigGenerator; import teetime.configuration.dsl.generator.ConfigGenerator;
import teetime.configuration.dsl.parser.antlr.ConfigAntlrTokenFileProvider; import teetime.configuration.dsl.parser.antlr.ConfigAntlrTokenFileProvider;
import teetime.configuration.dsl.parser.antlr.ConfigParser; import teetime.configuration.dsl.parser.antlr.ConfigParser;
...@@ -191,4 +196,14 @@ public abstract class AbstractConfigRuntimeModule extends DefaultRuntimeModule { ...@@ -191,4 +196,14 @@ public abstract class AbstractConfigRuntimeModule extends DefaultRuntimeModule {
return ConfigGenerator.class; return ConfigGenerator.class;
} }
// contributed by org.eclipse.xtext.xtext.generator.formatting.Formatter2Fragment2
public Class<? extends IFormatter2> bindIFormatter2() {
return ConfigFormatter.class;
}
// contributed by org.eclipse.xtext.xtext.generator.formatting.Formatter2Fragment2
public void configureFormatterPreferences(Binder binder) {
binder.bind(IPreferenceValuesProvider.class).annotatedWith(FormatterPreferences.class).to(FormatterPreferenceValuesProvider.class);
}
} }
...@@ -288,17 +288,6 @@ public class ConfigGrammarAccess extends AbstractGrammarElementFinder { ...@@ -288,17 +288,6 @@ public class ConfigGrammarAccess extends AbstractGrammarElementFinder {
private final Keyword cFullStopKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0); private final Keyword cFullStopKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
private final RuleCall cIDTerminalRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1); private final RuleCall cIDTerminalRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
///// *** Connection description like "id1->id2" or "id1.outputPort->id2.outputPort" * /
////ConnectionLongForm:
//// (startStageId=ID)('.'(outputPortId=ID))? '->' targetStageId=ID('.'(inputPortId=ID))?
////;
////
///// *** Connection description like "id1->id2->id3" * /
////ConnectionShortForm:
//// //two stages is with defined by ConnectionLongForm already
//// //to decide which form it is, the sort notation must contain at least 3 ids
//// id=ID '->' idi=ID '->' idii=ID( '->' otherIDs += ID)*
////;
/// *** An id that may contain dots like "de.mzl.dsl.ConfigurationBuilder" * / QualifiedName: /// *** An id that may contain dots like "de.mzl.dsl.ConfigurationBuilder" * / QualifiedName:
// ID ('.' ID)*; // ID ('.' ID)*;
@Override public ParserRule getRule() { return rule; } @Override public ParserRule getRule() { return rule; }
...@@ -576,17 +565,6 @@ public class ConfigGrammarAccess extends AbstractGrammarElementFinder { ...@@ -576,17 +565,6 @@ public class ConfigGrammarAccess extends AbstractGrammarElementFinder {
return getConnectionAccess().getRule(); return getConnectionAccess().getRule();
} }
///// *** Connection description like "id1->id2" or "id1.outputPort->id2.outputPort" * /
////ConnectionLongForm:
//// (startStageId=ID)('.'(outputPortId=ID))? '->' targetStageId=ID('.'(inputPortId=ID))?
////;
////
///// *** Connection description like "id1->id2->id3" * /
////ConnectionShortForm:
//// //two stages is with defined by ConnectionLongForm already
//// //to decide which form it is, the sort notation must contain at least 3 ids
//// id=ID '->' idi=ID '->' idii=ID( '->' otherIDs += ID)*
////;
/// *** An id that may contain dots like "de.mzl.dsl.ConfigurationBuilder" * / QualifiedName: /// *** An id that may contain dots like "de.mzl.dsl.ConfigurationBuilder" * / QualifiedName:
// ID ('.' ID)*; // ID ('.' ID)*;
public QualifiedNameElements getQualifiedNameAccess() { public QualifiedNameElements getQualifiedNameAccess() {
......
...@@ -38,6 +38,9 @@ Workflow { ...@@ -38,6 +38,9 @@ Workflow {
validator = { validator = {
// composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator" // composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
} }
formatter = {
generateStub = true
}
} }
} }
} }
/*
* generated by Xtext 2.9.2
*/
package teetime.configuration.dsl.formatting2
import com.google.inject.Inject
import org.eclipse.xtext.formatting2.AbstractFormatter2
import org.eclipse.xtext.formatting2.IFormattableDocument
import teetime.configuration.dsl.config.Configuration
import teetime.configuration.dsl.config.ConfigurationElement
import teetime.configuration.dsl.config.Connection
import teetime.configuration.dsl.config.Stage
import teetime.configuration.dsl.services.ConfigGrammarAccess
class ConfigFormatter extends AbstractFormatter2 {
def dispatch void format(Configuration configuration, extension IFormattableDocument document) {
// TODO: format HiddenRegions around keywords, attributes, cross references, etc.
configuration.getArgumentList.format;
val open = configuration.regionFor.keyword("{")
open.append[newLine]
val close = configuration.regionFor.keyword("}")
interior(open, close)[indent]
for (ConfigurationElement elements : configuration.getElements()) {
elements.format;
}
}
def dispatch void format(Stage stage, extension IFormattableDocument document) {
// TODO: format HiddenRegions around keywords, attributes, cross references, etc.
stage.getParameter.format;
stage.getArgumentList.format;
stage.append[newLine]
}
// TODO: implement for Connection, ArgumentDeclarationList, Parameter
def dispatch void format(Connection conn, extension IFormattableDocument document){
conn.append[newLine]
conn.startStage.format
conn.middleStages.forEach[format]
conn.finalStage.format
}
}
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment