diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettings.java b/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettings.java new file mode 100644 index 0000000000000000000000000000000000000000..c531ee6ff2af2ed2ed92661dc02d699e24464320 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettings.java @@ -0,0 +1,12 @@ +package org.jastadd.tooling; + +import com.intellij.psi.codeStyle.CodeStyleSettings; + import com.intellij.psi.codeStyle.CustomCodeStyleSettings; + +public class RelAstGrammarCodeStyleSettings extends CustomCodeStyleSettings { + + public RelAstGrammarCodeStyleSettings(CodeStyleSettings settings) { + super("RelAstGrammarCodeStyleSettings", settings); + } + +} diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettingsProvider.java b/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettingsProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..ed57139d1595a5e95f09b8ecc25a0d465d29cbb1 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettingsProvider.java @@ -0,0 +1,44 @@ +package org.jastadd.tooling; + +import com.intellij.application.options.CodeStyleAbstractConfigurable; + import com.intellij.application.options.CodeStyleAbstractPanel; + import com.intellij.application.options.TabbedLanguageCodeStylePanel; + import com.intellij.psi.codeStyle.CodeStyleConfigurable; + import com.intellij.psi.codeStyle.CodeStyleSettings; + import com.intellij.psi.codeStyle.CodeStyleSettingsProvider; + import com.intellij.psi.codeStyle.CustomCodeStyleSettings; + import org.jetbrains.annotations.NotNull; + import org.jetbrains.annotations.Nullable; + +public class RelAstGrammarCodeStyleSettingsProvider extends CodeStyleSettingsProvider { + + @Override + public CustomCodeStyleSettings createCustomSettings(CodeStyleSettings settings) { + return new RelAstGrammarCodeStyleSettings(settings); + } + + @Nullable + @Override + public String getConfigurableDisplayName() { + return "RelAst Grammar"; + } + + @NotNull + public CodeStyleConfigurable createConfigurable(@NotNull CodeStyleSettings settings, @NotNull CodeStyleSettings modelSettings) { + return new CodeStyleAbstractConfigurable(settings, modelSettings, this.getConfigurableDisplayName()) { + @Override + protected CodeStyleAbstractPanel createPanel(CodeStyleSettings settings) { + return new SimpleCodeStyleMainPanel(getCurrentSettings(), settings); + } + }; + } + + private static class SimpleCodeStyleMainPanel extends TabbedLanguageCodeStylePanel { + + public SimpleCodeStyleMainPanel(CodeStyleSettings currentSettings, CodeStyleSettings settings) { + super(RelAstGrammar.INSTANCE, currentSettings, settings); + } + + } + +} diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarFormattingModelBuilder.java b/src/main/java/org/jastadd/tooling/RelAstGrammarFormattingModelBuilder.java index fc3a2efafb363b222d9c6fb24f10e9853599d2e9..4424b6000fd05825c5b34416d50c0ce714087111 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarFormattingModelBuilder.java +++ b/src/main/java/org/jastadd/tooling/RelAstGrammarFormattingModelBuilder.java @@ -28,8 +28,7 @@ public class RelAstGrammarFormattingModelBuilder implements FormattingModelBuild .between(RelAstGrammarTypes.COMPONENT, RelAstGrammarTypes.COMPONENT).spaces(1) .around(RelAstGrammarTypes.DOT).none() .before(roleMultiplicityTokens).spaceIf(commonSettings.SPACE_AROUND_UNARY_OPERATOR) - .beforeInside(RelAstGrammarTypes.COL, RelAstGrammarTypes.TYPE_DECL).spaceIf(commonSettings.SPACE_BEFORE_COLON) - .afterInside(RelAstGrammarTypes.COL, RelAstGrammarTypes.TYPE_DECL).spaceIf(commonSettings.SPACE_AFTER_COLON) + .aroundInside(RelAstGrammarTypes.COL, RelAstGrammarTypes.TYPE_DECL).spaceIf(commonSettings.SPACE_AROUND_ADDITIVE_OPERATORS) .aroundInside(RelAstGrammarTypes.COL, RelAstGrammarTypes.COMPONENT).none() .withinPair(RelAstGrammarTypes.LT, RelAstGrammarTypes.GT).spaceIf(commonSettings.SPACE_WITHIN_CAST_PARENTHESES) .withinPair(RelAstGrammarTypes.LBRACKET, RelAstGrammarTypes.RBRACKET).spaceIf(commonSettings.SPACE_WITHIN_BRACKETS) diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarLanguageCodeStyleSettingsProvider.java b/src/main/java/org/jastadd/tooling/RelAstGrammarLanguageCodeStyleSettingsProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..51e717ef3df6c37af8c2787031e6d4d48a484c97 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/RelAstGrammarLanguageCodeStyleSettingsProvider.java @@ -0,0 +1,55 @@ +package org.jastadd.tooling; + +import com.intellij.lang.Language; +import com.intellij.psi.codeStyle.CodeStyleSettingsCustomizable; +import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider; +import org.jetbrains.annotations.NotNull; + +public class RelAstGrammarLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSettingsProvider { + + @NotNull + @Override + public Language getLanguage() { + return RelAstGrammar.INSTANCE; + } + + @Override + public void customizeSettings(@NotNull CodeStyleSettingsCustomizable consumer, @NotNull SettingsType settingsType) { + if (settingsType == SettingsType.SPACING_SETTINGS) { + consumer.showStandardOptions("SPACE_AROUND_ASSIGNMENT_OPERATORS"); + consumer.renameStandardOption("SPACE_AROUND_ASSIGNMENT_OPERATORS", "Production Symbol (::=)"); + + consumer.showStandardOptions("SPACE_BEFORE_SEMICOLON"); + consumer.renameStandardOption("SPACE_BEFORE_SEMICOLON", "Before semicolon"); + + consumer.showStandardOptions("SPACE_AROUND_RELATIONAL_OPERATORS"); + consumer.renameStandardOption("SPACE_AROUND_RELATIONAL_OPERATORS", "Relation Directions (->,<->,<-)"); + + consumer.showStandardOptions("SPACE_AROUND_UNARY_OPERATOR"); + consumer.renameStandardOption("SPACE_AROUND_UNARY_OPERATOR", "Multiplicity Operators (*,?)"); + + consumer.showStandardOptions("SPACE_AROUND_ADDITIVE_OPERATORS"); + consumer.renameStandardOption("SPACE_AROUND_ADDITIVE_OPERATORS", "Superclass separator (:)"); + + consumer.showStandardOptions("SPACE_WITHIN_CAST_PARENTHESES"); + consumer.renameStandardOption("SPACE_WITHIN_CAST_PARENTHESES", "Tokens"); + + consumer.showStandardOptions("SPACE_WITHIN_BRACKETS"); + consumer.renameStandardOption("SPACE_WITHIN_BRACKETS", "Optional components"); + } else if (settingsType == SettingsType.BLANK_LINES_SETTINGS) { + consumer.showStandardOptions("KEEP_BLANK_LINES_IN_CODE"); + } + } + + @Override + public String getCodeSample(@NotNull SettingsType settingsType) { + return "Program ::= GrammarFile* <NameList:java.util.Map<String,String>>;\n" + + "abstract Grammar ::= Declaration*; /* good rule! */\n" + + "GrammarFile : Grammar ::= <FileName> ; // also good rule\n" + + "/** the best rule */\n" + + "abstract Declaration ::= Comment* /Comment/;\n" + + "TypeDecl:Declaration ::= <Name> <Abstract:boolean> Component* [Comment];\n\n\n" + + "rel TypeDecl.SuperType? <-> TypeDecl.SubType*;\n"; + } + +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index f591fa9116d3d4208895a73a5922b1ceff5ef111..17362f084a33b376e7e2e962de5658089782a73e 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -48,6 +48,11 @@ <lang.formatter language="JastAddGrammar" implementationClass="org.jastadd.tooling.RelAstGrammarFormattingModelBuilder"/> + + <codeStyleSettingsProvider implementation="org.jastadd.tooling.RelAstGrammarCodeStyleSettingsProvider"/> + + <langCodeStyleSettingsProvider + implementation="org.jastadd.tooling.RelAstGrammarLanguageCodeStyleSettingsProvider"/> </extensions> <actions>