⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pylintprefpage.java

📁 Python Development Environment (Python IDE plugin for Eclipse). Features editor, code completion, re
💻 JAVA
字号:
/*
 * Created on Oct 26, 2004
 *
 * @author Fabio Zadrozny
 */
package org.python.pydev.builder.pylint;

import java.io.File;

import org.eclipse.core.resources.IMarker;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.FileFieldEditor;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.preference.RadioGroupFieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.python.pydev.plugin.PydevPlugin;
import org.python.pydev.plugin.PydevPrefs;
import org.python.pydev.utils.CustomizableFieldEditor;
import org.python.pydev.utils.LabelFieldEditor;

/**
 * @author Fabio Zadrozny
 */
public class PyLintPrefPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

	public static final String PYLINT_FILE_LOCATION = "PYLINT_FILE_LOCATION";

	public static final String USE_PYLINT = "USE_PYLINT";

	public static final boolean DEFAULT_USE_PYLINT = false;
	
	public static final int SEVERITY_IGNORE = -1;
	
	public static final int COLS = 4;
	
	
	public static final String[][] LABEL_AND_VALUE = new String[][]{
            {"Error"  , String.valueOf(IMarker.SEVERITY_ERROR)},
            {"Warning", String.valueOf(IMarker.SEVERITY_WARNING)},
            {"Info" , String.valueOf(IMarker.SEVERITY_INFO)},
            {"Ignore" , String.valueOf(SEVERITY_IGNORE)},
    };


	
	// errors
	public static final String SEVERITY_ERRORS = "SEVERITY_ERRORS";
	
	public static final int DEFAULT_SEVERITY_ERRORS = IMarker.SEVERITY_ERROR;

	
	//warnings
	public static final String SEVERITY_WARNINGS = "SEVERITY_WARNINGS";
	
	public static final int DEFAULT_SEVERITY_WARNINGS = IMarker.SEVERITY_WARNING;


	//fatal
	public static final String SEVERITY_FATAL = "SEVERITY_FATAL";
	
	public static final int DEFAULT_SEVERITY_FATAL = IMarker.SEVERITY_ERROR;

	
	//coding std
	public static final String SEVERITY_CODING_STANDARD = "SEVERITY_CODING_STANDARD";
	
	public static final int DEFAULT_SEVERITY_CODING_STANDARD = SEVERITY_IGNORE;

	
	//refactor
	public static final String SEVERITY_REFACTOR = "SEVERITY_REFACTOR";
	
	public static final int DEFAULT_SEVERITY_REFACTOR = SEVERITY_IGNORE;

	
	//console
	public static final String USE_CONSOLE = "USE_CONSOLE";

	public static final boolean DEFAULT_USE_CONSOLE = true;

	
	//args
	public static final String PYLINT_ARGS = "PYLINT_ARGS";

	public static final String DEFAULT_PYLINT_ARGS = "";
	
	//delta
	public static final String MAX_PYLINT_DELTA = "MAX_PYLINT_DELTA";

	public static final int DEFAULT_MAX_PYLINT_DELTA = 4;


	public PyLintPrefPage() {
		super(FLAT);
		setPreferenceStore(PydevPlugin.getDefault().getPreferenceStore());
		setDescription("Pylint");
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#createFieldEditors()
	 */
	protected void createFieldEditors() {
		final Composite p = getFieldEditorParent();

		addField(new BooleanFieldEditor(USE_PYLINT, "Use pylint?", p));
		addField(new BooleanFieldEditor(USE_CONSOLE, "Redirect Pylint output to console?", p));
		addField(new IntegerFieldEditor(MAX_PYLINT_DELTA, "Max simultaneous processes for PyLint?", p));
		FileFieldEditor fileField = new FileFieldEditor(PYLINT_FILE_LOCATION, "Location of pylint (lint.py):", true, p);
		addField(fileField);

		addField(new RadioGroupFieldEditor(SEVERITY_FATAL, "FATAL Severity", COLS, LABEL_AND_VALUE, p, true));
		
		addField(new RadioGroupFieldEditor(SEVERITY_ERRORS, "ERRORS Severity", COLS, LABEL_AND_VALUE, p, true));
		
		addField(new RadioGroupFieldEditor(SEVERITY_WARNINGS, "WARNINGS Severity", COLS, LABEL_AND_VALUE, p, true));
		
		addField(new RadioGroupFieldEditor(SEVERITY_CODING_STANDARD, "CONVENTIONS Severity", COLS, LABEL_AND_VALUE, p, true));
		
		addField(new RadioGroupFieldEditor(SEVERITY_REFACTOR, "REFACTOR Severity", COLS, LABEL_AND_VALUE, p, true));

		CustomizableFieldEditor stringFieldEditor = new CustomizableFieldEditor(PYLINT_ARGS, "Arguments to pass to pylint (customize its output).\n"
				+ "The  --include-ids=y is always included and does not appear here..", p);
		addField(stringFieldEditor);

		String w = "";
		Button button = new Button(p, SWT.NONE);
		button.addSelectionListener(new SelectionListener(){

			public void widgetSelected(SelectionEvent e) {
		        final String w = "\n\nTo ignore some warning on a line in a file, you can put the comment: \n" +
	    		"#IGNORE:ID, so that the id is the warning that you want to ignore. \n" +
	    		"E.g.: if you have the code:\n\n" +
	    		"from foo import * #IGNORE:W0401\n\n" +
	    		"The wildcard import will be ignored.\n\n" +
	    		"NOTE:for warnings to appear in the problems view, you have\n" +
	    		"to set your filter to accept the org.python.pydev.pylintproblem type!\n\n" +
	    		"NOTE2: Make sure that your file is a valid module in the PYTHONPATH, because\n" +
	    		"pylint doesn't analyze the file itself, but the module itself (you should\n" +
	    		"be able to import it from python without giving the file path).";
		        
		        MessageDialog.openInformation(p.getShell(), "Help", w);
			}

			public void widgetDefaultSelected(SelectionEvent e) {
			}
			
		});
		button.setText("Click for help (ignoring errors and troubleshooting)");
		GridData d = new GridData();
		d.horizontalAlignment = GridData.FILL;
		d.grabExcessHorizontalSpace = true;
		button.setLayoutData(d);
		
		FieldEditor fe = new LabelFieldEditor("Help", w, p);
		addField(fe);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
	 */
	public void init(IWorkbench workbench) {

	}

	/**
	 * @return
	 */
	public static String getPyLintLocation() {
		return PydevPrefs.getPreferences().getString(PYLINT_FILE_LOCATION);
	}

	private static boolean communicatedOnce = false;

	/**
	 * should we use py lint?
	 * 
	 * @return
	 */
	public static boolean usePyLint() {
		boolean b = PydevPrefs.getPreferences().getBoolean(USE_PYLINT);

		if (!isPylintConfigured(PyLintPrefPage.getPyLintLocation())) {
			if (b && !communicatedOnce) {
				communicatedOnce = true;
				PydevPlugin.log("Unable to use pylint because it is not properly configured.");
			}
			return false;
		}

		return b;
	}

	/**
	 * Checks if location of pylint is properly configured.
	 */
	public static boolean isPylintConfigured(String pylintLocation) {

		File pylint = new File(pylintLocation);

		if (!pylint.exists() && pylint.isFile()) {
			return false;
		}
		return true;
	}

	public static boolean useErrors() {
	    return eSeverity() != SEVERITY_IGNORE;
	}

	public static boolean useWarnings() {
	    return wSeverity() != SEVERITY_IGNORE;
	}

	public static boolean useFatal() {
		return fSeverity() != SEVERITY_IGNORE;
	}

	public static boolean useCodingStandard() {
	    return cSeverity() != SEVERITY_IGNORE;
	}

	public static boolean useRefactorTips() {
		return rSeverity() != SEVERITY_IGNORE;
	}

	
	
	public static boolean useConsole() {
		return PydevPrefs.getPreferences().getBoolean(USE_CONSOLE);
	}

	public static String getPylintArgs() {
		return PydevPrefs.getPreferences().getString(PYLINT_ARGS);
	}

	public static int getMaxPyLintDelta() {
		return PydevPrefs.getPreferences().getInt(MAX_PYLINT_DELTA);
	}

	
	
	public static int wSeverity() {
		return PydevPrefs.getPreferences().getInt(SEVERITY_WARNINGS);
	}

	public static int eSeverity() {
		return PydevPrefs.getPreferences().getInt(SEVERITY_ERRORS);
	}

	public static int fSeverity() {
		return PydevPrefs.getPreferences().getInt(SEVERITY_FATAL);
	}

	public static int cSeverity() {
		return PydevPrefs.getPreferences().getInt(SEVERITY_CODING_STANDARD);
	}

	public static int rSeverity() {
		return PydevPrefs.getPreferences().getInt(SEVERITY_REFACTOR);
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -