mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-87318 Backspace should delete whitespace to chosen indent level, or be configurable
following CR-IU-938
This commit is contained in:
+6
-4
@@ -15,9 +15,11 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.editorActions;
|
||||
|
||||
/**
|
||||
* Allows specific languages to override backspace unindent mode set in global editor preferences.
|
||||
*
|
||||
* @see SmartBackspaceDisabler
|
||||
*/
|
||||
public abstract class BackspaceModeOverride {
|
||||
/**
|
||||
* @see SmartBackspaceMode
|
||||
*/
|
||||
public abstract int getBackspaceMode(int modeFromSettings);
|
||||
public abstract SmartBackspaceMode getBackspaceMode(SmartBackspaceMode modeFromSettings);
|
||||
}
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ package com.intellij.codeInsight.editorActions;
|
||||
|
||||
public class SmartBackspaceDisabler extends BackspaceModeOverride {
|
||||
@Override
|
||||
public int getBackspaceMode(int modeFromSettings) {
|
||||
public SmartBackspaceMode getBackspaceMode(SmartBackspaceMode modeFromSettings) {
|
||||
return modeFromSettings == SmartBackspaceMode.AUTOINDENT ? SmartBackspaceMode.INDENT : modeFromSettings;
|
||||
}
|
||||
}
|
||||
+2
-6
@@ -15,10 +15,6 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.editorActions;
|
||||
|
||||
public class SmartBackspaceMode {
|
||||
public static final int OFF = 0;
|
||||
public static final int AUTOINDENT = 1;
|
||||
public static final int INDENT = 2;
|
||||
|
||||
private SmartBackspaceMode() {}
|
||||
public enum SmartBackspaceMode {
|
||||
OFF, AUTOINDENT, INDENT;
|
||||
}
|
||||
|
||||
+9
-8
@@ -170,18 +170,19 @@ public class EditorSmartKeysConfigurable extends CompositeConfigurable<UnnamedCo
|
||||
|
||||
myCbSurroundSelectionOnTyping.setSelected(codeInsightSettings.SURROUND_SELECTION_ON_QUOTE_TYPED);
|
||||
|
||||
switch (codeInsightSettings.SMART_BACKSPACE) {
|
||||
case SmartBackspaceMode.OFF:
|
||||
SmartBackspaceMode backspaceMode = codeInsightSettings.getBackspaceMode();
|
||||
switch (backspaceMode) {
|
||||
case OFF:
|
||||
mySmartBackspaceCombo.setSelectedItem(OFF);
|
||||
break;
|
||||
case SmartBackspaceMode.INDENT:
|
||||
case INDENT:
|
||||
mySmartBackspaceCombo.setSelectedItem(SIMPLE);
|
||||
break;
|
||||
case SmartBackspaceMode.AUTOINDENT:
|
||||
case AUTOINDENT:
|
||||
mySmartBackspaceCombo.setSelectedItem(SMART);
|
||||
break;
|
||||
default:
|
||||
LOG.error("Unexpected smart backspace mode value: " + codeInsightSettings.SMART_BACKSPACE);
|
||||
LOG.error("Unexpected smart backspace mode value: " + backspaceMode);
|
||||
}
|
||||
|
||||
super.reset();
|
||||
@@ -203,7 +204,7 @@ public class EditorSmartKeysConfigurable extends CompositeConfigurable<UnnamedCo
|
||||
codeInsightSettings.SURROUND_SELECTION_ON_QUOTE_TYPED = myCbSurroundSelectionOnTyping.isSelected();
|
||||
editorSettings.setCamelWords(myCbCamelWords.isSelected());
|
||||
codeInsightSettings.REFORMAT_ON_PASTE = getReformatPastedBlockValue();
|
||||
codeInsightSettings.SMART_BACKSPACE = getSmartBackspaceModeValue();
|
||||
codeInsightSettings.setBackspaceMode(getSmartBackspaceModeValue());
|
||||
|
||||
super.apply();
|
||||
}
|
||||
@@ -229,7 +230,7 @@ public class EditorSmartKeysConfigurable extends CompositeConfigurable<UnnamedCo
|
||||
|
||||
isModified |= isModified(myCbSurroundSelectionOnTyping, codeInsightSettings.SURROUND_SELECTION_ON_QUOTE_TYPED);
|
||||
|
||||
isModified |= (getSmartBackspaceModeValue() != codeInsightSettings.SMART_BACKSPACE);
|
||||
isModified |= (getSmartBackspaceModeValue() != codeInsightSettings.getBackspaceMode());
|
||||
|
||||
return isModified;
|
||||
|
||||
@@ -259,7 +260,7 @@ public class EditorSmartKeysConfigurable extends CompositeConfigurable<UnnamedCo
|
||||
}
|
||||
}
|
||||
|
||||
private int getSmartBackspaceModeValue() {
|
||||
private SmartBackspaceMode getSmartBackspaceModeValue() {
|
||||
Object selectedItem = mySmartBackspaceCombo.getSelectedItem();
|
||||
if (OFF.equals(selectedItem)){
|
||||
return SmartBackspaceMode.OFF;
|
||||
|
||||
@@ -23,9 +23,12 @@ import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
|
||||
import com.intellij.util.xmlb.XmlSerializationException;
|
||||
import com.intellij.util.xmlb.XmlSerializer;
|
||||
import com.intellij.util.xmlb.annotations.AbstractCollection;
|
||||
import com.intellij.util.xmlb.annotations.OptionTag;
|
||||
import com.intellij.util.xmlb.annotations.Property;
|
||||
import com.intellij.util.xmlb.annotations.Transient;
|
||||
import org.intellij.lang.annotations.MagicConstant;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@State(
|
||||
@@ -77,8 +80,20 @@ public class CodeInsightSettings implements PersistentStateComponent<Element>, C
|
||||
|
||||
public boolean SHOW_FULL_SIGNATURES_IN_PARAMETER_INFO = false;
|
||||
|
||||
@MagicConstant(intValues = {SmartBackspaceMode.OFF, SmartBackspaceMode.AUTOINDENT, SmartBackspaceMode.INDENT})
|
||||
public int SMART_BACKSPACE = SmartBackspaceMode.AUTOINDENT;
|
||||
@OptionTag
|
||||
private int SMART_BACKSPACE = SmartBackspaceMode.AUTOINDENT.ordinal();
|
||||
|
||||
@Transient
|
||||
@NotNull
|
||||
public SmartBackspaceMode getBackspaceMode() {
|
||||
SmartBackspaceMode[] values = SmartBackspaceMode.values();
|
||||
return SMART_BACKSPACE >= 0 && SMART_BACKSPACE < values.length ? values[SMART_BACKSPACE] : SmartBackspaceMode.OFF;
|
||||
}
|
||||
|
||||
@Transient
|
||||
public void setBackspaceMode(@NotNull SmartBackspaceMode mode) {
|
||||
SMART_BACKSPACE = mode.ordinal();
|
||||
}
|
||||
|
||||
public boolean SMART_INDENT_ON_ENTER = true;
|
||||
public boolean INSERT_BRACE_ON_ENTER = true;
|
||||
|
||||
+5
-5
@@ -22,10 +22,10 @@ import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiFile;
|
||||
|
||||
abstract class AbstractIndentingBackspaceHandler extends BackspaceHandlerDelegate {
|
||||
private final int myMode;
|
||||
private final SmartBackspaceMode myMode;
|
||||
private boolean myEnabled;
|
||||
|
||||
AbstractIndentingBackspaceHandler(int mode) {
|
||||
AbstractIndentingBackspaceHandler(SmartBackspaceMode mode) {
|
||||
myMode = mode;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ abstract class AbstractIndentingBackspaceHandler extends BackspaceHandlerDelegat
|
||||
if (!StringUtil.isWhiteSpace(c)) {
|
||||
return;
|
||||
}
|
||||
int mode = getBackspaceMode(file.getLanguage());
|
||||
SmartBackspaceMode mode = getBackspaceMode(file.getLanguage());
|
||||
if (mode != myMode) {
|
||||
return;
|
||||
}
|
||||
@@ -55,8 +55,8 @@ abstract class AbstractIndentingBackspaceHandler extends BackspaceHandlerDelegat
|
||||
|
||||
protected abstract boolean doCharDeleted(char c, PsiFile file, Editor editor);
|
||||
|
||||
private static int getBackspaceMode(Language language) {
|
||||
int mode = CodeInsightSettings.getInstance().SMART_BACKSPACE;
|
||||
private static SmartBackspaceMode getBackspaceMode(Language language) {
|
||||
SmartBackspaceMode mode = CodeInsightSettings.getInstance().getBackspaceMode();
|
||||
BackspaceModeOverride override = LanguageBackspaceModeOverride.INSTANCE.forLanguage(language);
|
||||
if (override != null) {
|
||||
mode = override.getBackspaceMode(mode);
|
||||
|
||||
+3
-3
@@ -31,15 +31,15 @@ public class SimpleIndentingBackspaceHandlerTest extends LightPlatformCodeInsigh
|
||||
}
|
||||
|
||||
private void doTest(String before, String after) {
|
||||
int savedMode = CodeInsightSettings.getInstance().SMART_BACKSPACE;
|
||||
SmartBackspaceMode savedMode = CodeInsightSettings.getInstance().getBackspaceMode();
|
||||
try {
|
||||
CodeInsightSettings.getInstance().SMART_BACKSPACE = SmartBackspaceMode.INDENT;
|
||||
CodeInsightSettings.getInstance().setBackspaceMode(SmartBackspaceMode.INDENT);
|
||||
configureFromFileText(getTestName(false) + ".txt", before);
|
||||
executeAction(IdeActions.ACTION_EDITOR_BACKSPACE);
|
||||
checkResultByText(after);
|
||||
}
|
||||
finally {
|
||||
CodeInsightSettings.getInstance().SMART_BACKSPACE = savedMode;
|
||||
CodeInsightSettings.getInstance().setBackspaceMode(savedMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -328,9 +328,9 @@ combobox.paste.reformat.indent.block=Indent Block
|
||||
combobox.paste.reformat.indent.each.line=Indent Each Line
|
||||
combobox.paste.reformat.reformat.block=Reformat Block
|
||||
combobox.smart.backspace=Unindent:
|
||||
combobox.smart.backspace.off=Off
|
||||
combobox.smart.backspace.simple=Simple
|
||||
combobox.smart.backspace.smart=Smart
|
||||
combobox.smart.backspace.off=Disabled
|
||||
combobox.smart.backspace.simple=To nearest indent position
|
||||
combobox.smart.backspace.smart=To proper indent position
|
||||
combobox.tab.placement.none=None
|
||||
combobox.tab.placement.top=Top
|
||||
combobox.tab.placement.left=Left
|
||||
|
||||
Reference in New Issue
Block a user