From ea00de2cd19a2d69ad3b4fe839ace7b05ff07a18 Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Sun, 3 Jan 2021 23:42:41 +0100 Subject: [PATCH] add code style settings --- .../RelAstGrammarCodeStyleSettings.java | 12 ++++ ...elAstGrammarCodeStyleSettingsProvider.java | 44 +++++++++++++++ .../RelAstGrammarFormattingModelBuilder.java | 3 +- ...mmarLanguageCodeStyleSettingsProvider.java | 55 +++++++++++++++++++ src/main/resources/META-INF/plugin.xml | 5 ++ 5 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettings.java create mode 100644 src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettingsProvider.java create mode 100644 src/main/java/org/jastadd/tooling/RelAstGrammarLanguageCodeStyleSettingsProvider.java 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 0000000..c531ee6 --- /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 0000000..ed57139 --- /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 fc3a2ef..4424b60 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 0000000..51e717e --- /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 f591fa9..17362f0 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> -- GitLab