mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[intellij sh] IDEA-260027 Avoid interception Run context configuration action for python files
GitOrigin-RevId: 3596d4b4c8ef79bc4d16aada023ca311a8723792
This commit is contained in:
committed by
intellij-monorepo-bot
parent
bf6715a387
commit
2ab2db5a09
1
.idea/modules.xml
generated
1
.idea/modules.xml
generated
@@ -993,6 +993,7 @@
|
||||
<module fileurl="file://$PROJECT_DIR$/plugins/sh/copyright/tests/intellij.sh.copyright.tests.iml" filepath="$PROJECT_DIR$/plugins/sh/copyright/tests/intellij.sh.copyright.tests.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/plugins/sh/core/intellij.sh.core.iml" filepath="$PROJECT_DIR$/plugins/sh/core/intellij.sh.core.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/plugins/sh/markdown/intellij.sh.markdown.iml" filepath="$PROJECT_DIR$/plugins/sh/markdown/intellij.sh.markdown.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/plugins/sh/python/intellij.sh.python.iml" filepath="$PROJECT_DIR$/plugins/sh/python/intellij.sh.python.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/plugins/sh/terminal/intellij.sh.terminal.iml" filepath="$PROJECT_DIR$/plugins/sh/terminal/intellij.sh.terminal.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/plugins/sh/core/tests/intellij.sh.tests.iml" filepath="$PROJECT_DIR$/plugins/sh/core/tests/intellij.sh.tests.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/plugins/space/jps-plugin/intellij.space.java.jps.iml" filepath="$PROJECT_DIR$/plugins/space/jps-plugin/intellij.space.java.jps.iml" />
|
||||
|
||||
@@ -246,6 +246,7 @@ object CommunityRepositoryModules {
|
||||
"intellij.sh.core",
|
||||
"intellij.sh.terminal",
|
||||
"intellij.sh.copyright",
|
||||
"intellij.sh.python",
|
||||
"intellij.sh.markdown")
|
||||
)
|
||||
},
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
<idea-plugin>
|
||||
<resource-bundle>messages.ShBundle</resource-bundle>
|
||||
|
||||
<extensionPoints>
|
||||
<extensionPoint qualifiedName="com.intellij.runMarkerContributionAdditionalCondition"
|
||||
interface="com.intellij.sh.run.ShRunnerAdditionalCondition"
|
||||
dynamic="true"/>
|
||||
</extensionPoints>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<fileType language="Shell Script" extensions="bash;sh;zsh" hashBangs="bash;sh;zsh" fieldName="INSTANCE" name="Shell Script"
|
||||
implementationClass="com.intellij.sh.ShFileType"/>
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.intellij.psi.PsiFile;
|
||||
import com.intellij.sh.parser.ShShebangParserUtil;
|
||||
import com.intellij.sh.psi.ShFile;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
final class ShRunFileAction extends DumbAwareAction {
|
||||
@@ -95,6 +96,11 @@ final class ShRunFileAction extends DumbAwareAction {
|
||||
if (e.getProject() != null) {
|
||||
PsiFile file = e.getData(CommonDataKeys.PSI_FILE);
|
||||
if (file != null) {
|
||||
var runningProhibited = ContainerUtil.exists(ShRunnerAdditionalCondition.EP.getExtensionsIfPointIsRegistered(),
|
||||
runningCondition -> {
|
||||
return runningCondition.isRunningProhibitedForFile(file);
|
||||
});
|
||||
if (runningProhibited) return false;
|
||||
if (file instanceof ShFile) return true;
|
||||
PsiElement firstChild = file.findElementAt(0);
|
||||
return firstChild instanceof PsiComment && firstChild.getText().startsWith("#!");
|
||||
|
||||
@@ -23,6 +23,10 @@ final class ShRunLineMarkerContributor extends RunLineMarkerContributor implemen
|
||||
public Info getInfo(@NotNull PsiElement element) {
|
||||
if (element instanceof OuterLanguageElementImpl || !(element instanceof LeafElement ) || element.getTextRange().getStartOffset() != 0)
|
||||
return null;
|
||||
var contributionProhibited = ContainerUtil.exists(ShRunnerAdditionalCondition.EP.getExtensionsIfPointIsRegistered(), additionalCondition -> {
|
||||
return additionalCondition.isRunningProhibitedForElement(element);
|
||||
});
|
||||
if (contributionProhibited) return null;
|
||||
PsiFile psiFile = element.getContainingFile();
|
||||
if (!(psiFile instanceof ShFile) && !element.getText().startsWith("#!")) return null;
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.intellij.sh.run;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public interface ShRunnerAdditionalCondition {
|
||||
ExtensionPointName<ShRunnerAdditionalCondition> EP = ExtensionPointName.create("com.intellij.runMarkerContributionAdditionalCondition");
|
||||
|
||||
boolean isRunningProhibitedForElement(@NotNull PsiElement element);
|
||||
boolean isRunningProhibitedForFile(@NotNull PsiFile file);
|
||||
}
|
||||
@@ -11,5 +11,6 @@
|
||||
<orderEntry type="module" module-name="intellij.sh.terminal" />
|
||||
<orderEntry type="module" module-name="intellij.sh.copyright" />
|
||||
<orderEntry type="module" module-name="intellij.sh.markdown" />
|
||||
<orderEntry type="module" module-name="intellij.sh.python" />
|
||||
</component>
|
||||
</module>
|
||||
15
plugins/sh/python/intellij.sh.python.iml
Normal file
15
plugins/sh/python/intellij.sh.python.iml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="intellij.python.psi" />
|
||||
<orderEntry type="module" module-name="intellij.sh.core" />
|
||||
<orderEntry type="module" module-name="intellij.platform.core" />
|
||||
</component>
|
||||
</module>
|
||||
8
plugins/sh/python/resources/intellij.sh.python.xml
Normal file
8
plugins/sh/python/resources/intellij.sh.python.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<idea-plugin package="com.intellij.sh.python">
|
||||
<dependencies>
|
||||
<plugin id="com.intellij.modules.python"/>
|
||||
</dependencies>
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<runMarkerContributionAdditionalCondition implementation="com.intellij.sh.python.PythonFileMarkerContributionAdditionalCondition"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.intellij.sh.python;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.sh.run.ShRunnerAdditionalCondition;
|
||||
import com.jetbrains.python.psi.PyFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PythonFileMarkerContributionAdditionalCondition implements ShRunnerAdditionalCondition {
|
||||
@Override
|
||||
public boolean isRunningProhibitedForElement(@NotNull PsiElement element) {
|
||||
PsiFile psiFile = element.getContainingFile();
|
||||
return psiFile instanceof PyFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRunningProhibitedForFile(@NotNull PsiFile file) {
|
||||
return file instanceof PyFile;
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@
|
||||
<module name="intellij.sh.terminal"/>
|
||||
<module name="intellij.sh.copyright"/>
|
||||
<module name="intellij.sh.markdown"/>
|
||||
<module name="intellij.sh.python"/>
|
||||
</content>
|
||||
<dependencies>
|
||||
<plugin id="com.intellij.modules.lang"/>
|
||||
|
||||
Reference in New Issue
Block a user