Skip to content

Commit d6fd836

Browse files
feat: use ComboxBox options to support global runOnSave
1 parent 5f2c76d commit d6fd836

File tree

3 files changed

+82
-7
lines changed

3 files changed

+82
-7
lines changed

Src/CSharpier.Rider/src/main/java/com/intellij/csharpier/CSharpierSettings.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,16 @@ public void setRunOnSave(boolean value) {
2525
this.runOnSave = value;
2626
}
2727

28+
private ProjectRunOnSaveOption projectRunOnSaveOption = ProjectRunOnSaveOption.SoftNeverRun;
29+
30+
public ProjectRunOnSaveOption getProjectRunOnSave() {
31+
return this.projectRunOnSaveOption;
32+
}
33+
34+
public void setProjectRunOnSave(ProjectRunOnSaveOption value) {
35+
this.projectRunOnSaveOption = value;
36+
}
37+
2838
private boolean useCustomPath;
2939

3040
public boolean getUseCustomPath() {
@@ -63,5 +73,21 @@ public CSharpierSettings getState() {
6373
@Override
6474
public void loadState(@NotNull CSharpierSettings state) {
6575
XmlSerializerUtil.copyBean(state, this);
76+
migrate();
6677
}
78+
79+
private void migrate() {
80+
// If runOnSave was enabled it becomes ProjectRunOnSaveOption.RunOnSave
81+
// we reset runOnSave to false - this value will never be used after this
82+
if (getRunOnSave()) {
83+
setRunOnSave(false);
84+
setProjectRunOnSave(ProjectRunOnSaveOption.RunOnSave);
85+
}
86+
}
87+
}
88+
89+
enum ProjectRunOnSaveOption {
90+
SoftNeverRun,
91+
HardNeverRun,
92+
RunOnSave,
6793
}

Src/CSharpier.Rider/src/main/java/com/intellij/csharpier/CSharpierSettingsComponent.java

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.intellij.csharpier;
22

3+
import com.intellij.openapi.diagnostic.Logger;
34
import com.intellij.openapi.options.SearchableConfigurable;
45
import com.intellij.openapi.project.Project;
6+
import com.intellij.openapi.ui.ComboBox;
57
import com.intellij.ui.components.JBCheckBox;
68
import com.intellij.ui.components.JBLabel;
79
import com.intellij.ui.components.JBTextField;
@@ -14,8 +16,15 @@
1416

1517
public class CSharpierSettingsComponent implements SearchableConfigurable {
1618

19+
Logger logger = CSharpierLogger.getInstance();
20+
1721
private final Project project;
18-
private JBCheckBox runOnSaveCheckBox = new JBCheckBox("Run on Save");
22+
private final String[] runOnSaveOptions = new String[] {
23+
"Don't run on save",
24+
"Never run on save",
25+
"Run on save",
26+
};
27+
private ComboBox<String> runOnSaveComboBox = new ComboBox<String>(runOnSaveOptions);
1928
private JBCheckBox globalRunOnSaveCheckBox = new JBCheckBox("Run on Save (Global)");
2029
private JBCheckBox disableCSharpierServerCheckBox = new JBCheckBox("Disable CSharpier Server");
2130
private JBCheckBox useCustomPath = new JBCheckBox("Override CSharpier Executable");
@@ -67,7 +76,12 @@ private JComponent createSectionHeader(String label) {
6776
return FormBuilder.createFormBuilder()
6877
.addComponent(createSectionHeader("General Settings"))
6978
.setFormLeftIndent(leftIndent)
70-
.addComponent(this.runOnSaveCheckBox, topInset)
79+
.addLabeledComponent(
80+
new JBLabel("Run on save (Project):"),
81+
this.runOnSaveComboBox,
82+
topInset,
83+
false
84+
)
7185
.addComponent(this.globalRunOnSaveCheckBox, topInset)
7286
.setFormLeftIndent(0)
7387
.addComponent(createSectionHeader("Developer Settings"), 20)
@@ -87,8 +101,8 @@ private JComponent createSectionHeader(String label) {
87101
@Override
88102
public boolean isModified() {
89103
return (
90-
CSharpierSettings.getInstance(this.project).getRunOnSave() !=
91-
this.runOnSaveCheckBox.isSelected() ||
104+
CSharpierSettings.getInstance(this.project).getProjectRunOnSave() !=
105+
this.toRunOnSaveOption() ||
92106
CSharpierGlobalSettings.getInstance(this.project).getRunOnSave() !=
93107
this.globalRunOnSaveCheckBox.isSelected() ||
94108
CSharpierSettings.getInstance(this.project).getCustomPath() !=
@@ -104,7 +118,7 @@ public boolean isModified() {
104118
public void apply() {
105119
var settings = CSharpierSettings.getInstance(this.project);
106120

107-
settings.setRunOnSave(this.runOnSaveCheckBox.isSelected());
121+
settings.setProjectRunOnSave(this.toRunOnSaveOption());
108122
settings.setCustomPath(this.customPathTextField.getText());
109123
settings.setDisableCSharpierServer(this.disableCSharpierServerCheckBox.isSelected());
110124
settings.setUseCustomPath(this.useCustomPath.isSelected());
@@ -116,12 +130,39 @@ public void apply() {
116130
@Override
117131
public void reset() {
118132
var settings = CSharpierSettings.getInstance(this.project);
119-
this.runOnSaveCheckBox.setSelected(settings.getRunOnSave());
133+
this.setSelectedRunOnSave(settings.getProjectRunOnSave());
120134
this.useCustomPath.setSelected(settings.getUseCustomPath());
121135
this.customPathTextField.setText(settings.getCustomPath());
122136
this.disableCSharpierServerCheckBox.setSelected(settings.getDisableCSharpierServer());
123137

124138
var globalSettings = CSharpierGlobalSettings.getInstance(this.project);
125139
this.globalRunOnSaveCheckBox.setSelected(globalSettings.getRunOnSave());
126140
}
141+
142+
private ProjectRunOnSaveOption toRunOnSaveOption() {
143+
String selectedItem = (String) runOnSaveComboBox.getSelectedItem();
144+
145+
if (selectedItem == runOnSaveOptions[0]) {
146+
return ProjectRunOnSaveOption.SoftNeverRun;
147+
} else if (selectedItem == runOnSaveOptions[1]) {
148+
return ProjectRunOnSaveOption.HardNeverRun;
149+
} else if (selectedItem == runOnSaveOptions[2]) {
150+
return ProjectRunOnSaveOption.RunOnSave;
151+
}
152+
153+
this.logger.debug("invalid runOnSaveComboBox selection: " + selectedItem);
154+
return ProjectRunOnSaveOption.SoftNeverRun;
155+
}
156+
157+
private void setSelectedRunOnSave(ProjectRunOnSaveOption saveOption) {
158+
if (saveOption == ProjectRunOnSaveOption.SoftNeverRun) {
159+
this.runOnSaveComboBox.setSelectedItem(runOnSaveOptions[0]);
160+
} else if (saveOption == ProjectRunOnSaveOption.HardNeverRun) {
161+
this.runOnSaveComboBox.setSelectedItem(runOnSaveOptions[1]);
162+
} else if (saveOption == ProjectRunOnSaveOption.RunOnSave) {
163+
this.runOnSaveComboBox.setSelectedItem(runOnSaveOptions[2]);
164+
}
165+
166+
this.logger.debug("tried to set invalid ProjectRunOnSaveOption: " + saveOption);
167+
}
127168
}

Src/CSharpier.Rider/src/main/java/com/intellij/csharpier/ReformatWithCSharpierOnSaveListener.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,15 @@ public void beforeDocumentSaving(@NotNull Document document) {
2121

2222
var cSharpierSettings = CSharpierSettings.getInstance(project);
2323
var cSharpierGlobalSettings = CSharpierGlobalSettings.getInstance(project);
24-
if (!(cSharpierSettings.getRunOnSave() || cSharpierGlobalSettings.getRunOnSave())) {
24+
25+
if (cSharpierSettings.getProjectRunOnSave() == ProjectRunOnSaveOption.HardNeverRun) {
26+
return;
27+
}
28+
29+
if (
30+
!(cSharpierSettings.getProjectRunOnSave() == ProjectRunOnSaveOption.RunOnSave ||
31+
cSharpierGlobalSettings.getRunOnSave())
32+
) {
2533
return;
2634
}
2735

0 commit comments

Comments
 (0)