context run action for python

This commit is contained in:
Dmitry Jemerov
2008-03-05 14:01:34 +03:00
parent 228aa7081f
commit 7873371732
4 changed files with 76 additions and 14 deletions
+5 -2
View File
@@ -20,8 +20,6 @@
<lang.psiStructureViewFactory language="Python" implementationClass="com.jetbrains.python.structureView.PyStructureViewFactory"/>
<lang.documentationProvider language="Python" implementationClass="com.jetbrains.python.PythonDocumentationProvider"/>
<annotator language="Python" implementationClass="com.jetbrains.python.validation.PyAnnotatingVisitor"/>
<configurationType implementation="com.jetbrains.python.run.PythonConfigurationType"/>
<programRunner implementation="com.jetbrains.python.run.PythonRunner"/>
<backspaceHandlerDelegate implementation="com.jetbrains.python.editor.PythonBackspaceHandler"/>
<quoteHandler fileType="Python" className="com.jetbrains.python.editor.PythonQuoteHandler"/>
<sdkType implementation="com.jetbrains.python.sdk.PythonSdkType"/>
@@ -31,5 +29,10 @@
<colorSettingsPage implementation="com.jetbrains.python.PythonColorsPage"/>
<extendWordSelectionHandler implementation="com.jetbrains.python.editor.selectWord.PyWordSelectionHandler"/>
<extendWordSelectionHandler implementation="com.jetbrains.python.editor.selectWord.PyStatementSelectionHandler"/>
<!-- Run/Debug -->
<configurationType implementation="com.jetbrains.python.run.PythonConfigurationType"/>
<programRunner implementation="com.jetbrains.python.run.PythonRunner"/>
<configurationProducer implementation="com.jetbrains.python.run.PythonRunConfigurationProducer"/>
</extensions>
</idea-plugin>
@@ -3,8 +3,9 @@ package com.jetbrains.python.run;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -14,6 +15,16 @@ import javax.swing.*;
* @author yole
*/
public class PythonConfigurationType implements ConfigurationType {
public static PythonConfigurationType getInstance() {
for(ConfigurationType configType: Extensions.getExtensions(CONFIGURATION_TYPE_EP)) {
if (configType instanceof PythonConfigurationType) {
return (PythonConfigurationType) configType;
}
}
assert false;
return null;
}
private Icon _icon = IconLoader.getIcon("/com/jetbrains/python/python.png");
private static class PythonConfigurationFactory extends ConfigurationFactory {
@@ -47,10 +58,4 @@ public class PythonConfigurationType implements ConfigurationType {
public String getId() {
return "PythonConfigurationType";
}
public void initComponent() {
}
public void disposeComponent() {
}
}
@@ -13,20 +13,18 @@ import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.util.DefaultJDOMExternalizer;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.JDOMExternalizable;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.*;
import com.jetbrains.python.sdk.PythonSdkType;
import org.jdom.Element;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
/**
* @author yole
*/
public class PythonRunConfiguration extends RunConfigurationBase {
public class PythonRunConfiguration extends RunConfigurationBase implements LocatableConfiguration {
public String SCRIPT_NAME;
public String PARAMETERS;
public String WORKING_DIRECTORY;
@@ -102,4 +100,16 @@ public class PythonRunConfiguration extends RunConfigurationBase {
public void setEnvs(final Map<String, String> envs) {
myEnvs = envs;
}
public boolean isGeneratedName() {
return Comparing.equal(getName(), suggestedName());
}
public String suggestedName() {
String name = new File(SCRIPT_NAME).getName();
if (name.endsWith(".py")) {
return name.substring(0, name.length()-3);
}
return name;
}
}
@@ -0,0 +1,44 @@
package com.jetbrains.python.run;
import com.intellij.execution.Location;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl;
import com.intellij.execution.junit.RuntimeConfigurationProducer;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.openapi.project.Project;
import com.jetbrains.python.PythonFileType;
/**
* @author yole
*/
public class PythonRunConfigurationProducer extends RuntimeConfigurationProducer implements Cloneable {
private PsiFile mySourceFile = null;
public PythonRunConfigurationProducer() {
super(PythonConfigurationType.getInstance());
}
public PsiElement getSourceElement() {
return mySourceFile;
}
protected RunnerAndConfigurationSettingsImpl createConfigurationByElement(final Location location, final ConfigurationContext context) {
mySourceFile = location.getPsiElement().getContainingFile();
if (mySourceFile == null || mySourceFile.getFileType() != PythonFileType.INSTANCE) {
return null;
}
final Project project = mySourceFile.getProject();
RunnerAndConfigurationSettingsImpl settings = cloneTemplateConfiguration(project, context);
PythonRunConfiguration configuration = (PythonRunConfiguration) settings.getConfiguration();
configuration.SCRIPT_NAME = mySourceFile.getVirtualFile().getPath();
configuration.setName(configuration.suggestedName());
copyStepsBeforeRun(project, configuration);
return settings;
}
public int compareTo(final Object o) {
return 0; //To change body of implemented methods use File | Settings | File Templates.
}
}