Blank line settings for PHP

This commit is contained in:
Rustam.Vishnyakov
2010-02-02 13:06:01 +03:00
parent 8d802271e9
commit d36c2b3f39
3 changed files with 333 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
/*
* Copyright 2000-2010 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.application.options.codeStyle;
import com.intellij.openapi.application.ApplicationBundle;
import com.intellij.openapi.options.Configurable;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsProvider;
import org.jetbrains.annotations.NotNull;
/**
* @author yole
*/
public class BlankLinesSettingsProvider extends CodeStyleSettingsProvider {
@NotNull
public Configurable createSettingsPage(final CodeStyleSettings settings, final CodeStyleSettings originalSettings) {
return new CodeStyleBlankLinesConfigurable(settings, originalSettings);
}
@Override
public String getConfigurableDisplayName() {
return ApplicationBundle.message("title.blank.lines");
}
}

View File

@@ -0,0 +1,42 @@
/*
* Copyright 2000-2010 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.application.options.codeStyle;
import com.intellij.application.options.CodeStyleAbstractConfigurable;
import com.intellij.application.options.CodeStyleAbstractPanel;
import com.intellij.openapi.application.ApplicationBundle;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import javax.swing.*;
public class CodeStyleBlankLinesConfigurable extends CodeStyleAbstractConfigurable {
public CodeStyleBlankLinesConfigurable(CodeStyleSettings settings, CodeStyleSettings cloneSettings) {
super(settings, cloneSettings, ApplicationBundle.message("title.blank.lines"));
}
protected CodeStyleAbstractPanel createPanel(final CodeStyleSettings settings) {
return new CodeStyleBlankLinesPanel(settings);
}
public Icon getIcon() {
return StdFileTypes.JAVA.getIcon();
}
public String getHelpTopic() {
return "reference.settingsdialog.IDE.globalcodestyle.blanklines";
}
}

View File

@@ -0,0 +1,254 @@
/*
* Copyright 2000-2010 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.application.options.codeStyle;
import com.intellij.application.options.CodeStyleAbstractPanel;
import com.intellij.ide.DataManager;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.application.ApplicationBundle;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.highlighter.EditorHighlighter;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.OptionGroup;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
public class CodeStyleBlankLinesPanel extends CodeStyleAbstractPanel {
private JTextField myKeepBlankLinesInDeclarations;
private JTextField myKeepBlankLinesInCode;
private JTextField myBlankLinesBeforePackage;
private JTextField myBlankLinesAfterPackage;
private JTextField myBlankLinesBeforeImports;
private JTextField myBlankLinesAfterImports;
private JTextField myBlankLinesAroundClass;
private JTextField myBlankLinesAroundField;
private JTextField myBlankLinesAroundMethod;
private JTextField myBlankLinesAroundFieldI;
private JTextField myBlankLinesAroundMethodI;
private JTextField myBlankLinesAfterClassHeader;
private JTextField myKeepBlankLinesBeforeRBrace;
private final JPanel myPanel = new JPanel(new GridBagLayout());
private static LanguageFileType myFileType = StdFileTypes.JSP; //TODO: Replace hardcoded value
public CodeStyleBlankLinesPanel(CodeStyleSettings settings) {
super(settings);
myPanel
.add(createKeepBlankLinesPanel(),
new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(0, 4, 0, 4), 0, 0));
myPanel
.add(createBlankLinesPanel(),
new GridBagConstraints(0, 1, 1, 1, 0, 0, GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(0, 4, 0, 4), 0, 0));
final JPanel previewPanel = createPreviewPanel();
myPanel
.add(previewPanel,
new GridBagConstraints(1, 0, 1, 2, 1, 1, GridBagConstraints.NORTH, GridBagConstraints.BOTH, new Insets(0, 0, 0, 4), 0, 0));
installPreviewPanel(previewPanel);
addPanelToWatch(myPanel);
}
private JPanel createBlankLinesPanel() {
OptionGroup optionGroup = new OptionGroup(ApplicationBundle.message("title.blank.lines"));
myBlankLinesBeforePackage = createTextField();
optionGroup.add(new JLabel(ApplicationBundle.message("editbox.blanklines.before.package.statement")), myBlankLinesBeforePackage);
myBlankLinesAfterPackage = createTextField();
optionGroup.add(new JLabel(ApplicationBundle.message("editbox.blanklines.after.package.statement")), myBlankLinesAfterPackage);
myBlankLinesBeforeImports = createTextField();
optionGroup.add(new JLabel(ApplicationBundle.message("editbox.blanklines.before.imports")), myBlankLinesBeforeImports);
myBlankLinesAfterImports = createTextField();
optionGroup.add(new JLabel(ApplicationBundle.message("editbox.blanklines.after.imports")), myBlankLinesAfterImports);
myBlankLinesAroundClass = createTextField();
optionGroup.add(new JLabel(ApplicationBundle.message("editbox.blanklines.around.class")), myBlankLinesAroundClass);
myBlankLinesAroundField = createTextField();
optionGroup.add(new JLabel(ApplicationBundle.message("editbox.blanklines.around.field")), myBlankLinesAroundField);
myBlankLinesAroundMethod = createTextField();
optionGroup.add(new JLabel(ApplicationBundle.message("editbox.blanklines.around.method")), myBlankLinesAroundMethod);
myBlankLinesAroundFieldI = createTextField();
optionGroup.add(new JLabel("Around field in interface:"), myBlankLinesAroundFieldI);
myBlankLinesAroundMethodI = createTextField();
optionGroup.add(new JLabel("Around method in interface:"), myBlankLinesAroundMethodI);
myBlankLinesAfterClassHeader = createTextField();
optionGroup.add(new JLabel(ApplicationBundle.message("editbox.blanklines.after.class.header")), myBlankLinesAfterClassHeader);
return optionGroup.createPanel();
}
private JPanel createKeepBlankLinesPanel() {
OptionGroup optionGroup = new OptionGroup(ApplicationBundle.message("title.keep.blank.lines"));
myKeepBlankLinesInDeclarations = createTextField();
optionGroup.add(new JLabel(ApplicationBundle.message("editbox.keep.blanklines.in.declarations")), myKeepBlankLinesInDeclarations);
myKeepBlankLinesInCode = createTextField();
optionGroup.add(new JLabel(ApplicationBundle.message("editbox.keep.blanklines.in.code")), myKeepBlankLinesInCode);
myKeepBlankLinesBeforeRBrace = createTextField();
optionGroup.add(new JLabel(ApplicationBundle.message("editbox.keep.blanklines.before.rbrace")), myKeepBlankLinesBeforeRBrace);
return optionGroup.createPanel();
}
private static JPanel createPreviewPanel() {
JPanel panel = new JPanel();
panel.setBorder(IdeBorderFactory.createTitledBorder(ApplicationBundle.message("title.preview")));
panel.setPreferredSize(new Dimension(200, 0));
return panel;
}
protected EditorHighlighter createHighlighter(final EditorColorsScheme scheme) {
Project project = PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext());
if (project == null) {
project = ProjectManager.getInstance().getDefaultProject();
}
return myFileType.getEditorHighlighter(project, null, scheme);
}
protected String getPreviewText() {
return "/*\n" +
" * This is a sample file.\n" +
" */\n" +
"package com.intellij.samples;\n" +
"import com.intellij.idea.Main;\n" +
"import javax.swing.*;\n" +
"import java.util.Vector;\n" +
"public class Foo {\n" +
" private int field1;\n" +
" private int field2;\n" +
" public void foo1() {\n\n" +
" }\n" +
" public void foo2() {\n" +
" }\n\n" +
"}";
}
protected void resetImpl(final CodeStyleSettings settings) {
myKeepBlankLinesInDeclarations.setText(String.valueOf(settings.KEEP_BLANK_LINES_IN_DECLARATIONS));
myKeepBlankLinesInCode.setText(String.valueOf(settings.KEEP_BLANK_LINES_IN_CODE));
myKeepBlankLinesBeforeRBrace.setText(String.valueOf(settings.KEEP_BLANK_LINES_BEFORE_RBRACE));
myBlankLinesBeforePackage.setText(String.valueOf(settings.BLANK_LINES_BEFORE_PACKAGE));
myBlankLinesAfterPackage.setText(String.valueOf(settings.BLANK_LINES_AFTER_PACKAGE));
myBlankLinesBeforeImports.setText(String.valueOf(settings.BLANK_LINES_BEFORE_IMPORTS));
myBlankLinesAfterImports.setText(String.valueOf(settings.BLANK_LINES_AFTER_IMPORTS));
myBlankLinesAroundClass.setText(String.valueOf(settings.BLANK_LINES_AROUND_CLASS));
myBlankLinesAroundField.setText(String.valueOf(settings.BLANK_LINES_AROUND_FIELD));
myBlankLinesAroundMethod.setText(String.valueOf(settings.BLANK_LINES_AROUND_METHOD));
myBlankLinesAroundFieldI.setText(String.valueOf(settings.BLANK_LINES_AROUND_FIELD_IN_INTERFACE));
myBlankLinesAroundMethodI.setText(String.valueOf(settings.BLANK_LINES_AROUND_METHOD_IN_INTERFACE));
myBlankLinesAfterClassHeader.setText(String.valueOf(settings.BLANK_LINES_AFTER_CLASS_HEADER));
}
public void apply(CodeStyleSettings settings) {
settings.KEEP_BLANK_LINES_IN_DECLARATIONS = getValue(myKeepBlankLinesInDeclarations);
settings.KEEP_BLANK_LINES_IN_CODE = getValue(myKeepBlankLinesInCode);
settings.KEEP_BLANK_LINES_BEFORE_RBRACE = getValue(myKeepBlankLinesBeforeRBrace);
settings.BLANK_LINES_BEFORE_PACKAGE = getValue(myBlankLinesBeforePackage);
settings.BLANK_LINES_AFTER_PACKAGE = getValue(myBlankLinesAfterPackage);
settings.BLANK_LINES_BEFORE_IMPORTS = getValue(myBlankLinesBeforeImports);
settings.BLANK_LINES_AFTER_IMPORTS = getValue(myBlankLinesAfterImports);
settings.BLANK_LINES_AROUND_CLASS = getValue(myBlankLinesAroundClass);
settings.BLANK_LINES_AROUND_FIELD = getValue(myBlankLinesAroundField);
settings.BLANK_LINES_AROUND_METHOD = getValue(myBlankLinesAroundMethod);
settings.BLANK_LINES_AROUND_FIELD_IN_INTERFACE = getValue(myBlankLinesAroundFieldI);
settings.BLANK_LINES_AROUND_METHOD_IN_INTERFACE = getValue(myBlankLinesAroundMethodI);
settings.BLANK_LINES_AFTER_CLASS_HEADER = getValue(myBlankLinesAfterClassHeader);
}
public boolean isModified(CodeStyleSettings settings) {
boolean isModified;
isModified = settings.KEEP_BLANK_LINES_IN_DECLARATIONS != getValue(myKeepBlankLinesInDeclarations);
isModified |= settings.KEEP_BLANK_LINES_IN_CODE != getValue(myKeepBlankLinesInCode);
isModified |= settings.KEEP_BLANK_LINES_BEFORE_RBRACE != getValue(myKeepBlankLinesBeforeRBrace);
isModified |= settings.BLANK_LINES_BEFORE_PACKAGE != getValue(myBlankLinesBeforePackage);
isModified |= settings.BLANK_LINES_AFTER_PACKAGE != getValue(myBlankLinesAfterPackage);
isModified |= settings.BLANK_LINES_BEFORE_IMPORTS != getValue(myBlankLinesBeforeImports);
isModified |= settings.BLANK_LINES_AFTER_IMPORTS != getValue(myBlankLinesAfterImports);
isModified |= settings.BLANK_LINES_AROUND_CLASS != getValue(myBlankLinesAroundClass);
isModified |= settings.BLANK_LINES_AROUND_FIELD != getValue(myBlankLinesAroundField);
isModified |= settings.BLANK_LINES_AROUND_METHOD != getValue(myBlankLinesAroundMethod);
isModified |= settings.BLANK_LINES_AROUND_FIELD_IN_INTERFACE != getValue(myBlankLinesAroundFieldI);
isModified |= settings.BLANK_LINES_AROUND_METHOD_IN_INTERFACE != getValue(myBlankLinesAroundMethodI);
isModified |= settings.BLANK_LINES_AFTER_CLASS_HEADER != getValue(myBlankLinesAfterClassHeader);
return isModified;
}
private static int getValue(JTextField textField) {
int ret = 0;
try {
ret = Integer.parseInt(textField.getText());
if (ret < 0) {
ret = 0;
}
if (ret > 10) {
ret = 10;
}
}
catch (NumberFormatException e) {
//bad number entered
}
return ret;
}
private static JTextField createTextField() {
return new JTextField(6);
}
protected int getRightMargin() {
return 37;
}
@NotNull
protected FileType getFileType() {
return StdFileTypes.JAVA;
}
public JComponent getPanel() {
return myPanel;
}
protected void prepareForReformat(final PsiFile psiFile) {
//psiFile.putUserData(PsiUtil.FILE_LANGUAGE_LEVEL_KEY, LanguageLevel.HIGHEST);
}
}