Skip to content

Commit 7f0c8bc

Browse files
committed
Merge remote-tracking branch 'origin/v201' into v202
# Conflicts: # build.gradle
2 parents baa97b4 + 9947255 commit 7f0c8bc

File tree

7 files changed

+95
-11
lines changed

7 files changed

+95
-11
lines changed

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
## 1.202.2
2+
3+
- Support specify `workingDirectory` and `executeInTerminal` options.
4+
```yaml
5+
scripts:
6+
# With options
7+
pod_install:
8+
script: pod install # Script text (required)
9+
directory: ios # Working directory (default: <project directory>)
10+
terminal: true # Should execute script in terminal? (default: false)
11+
```
12+
13+
## 1.201.2
14+
15+
- Support specify `workingDirectory` and `executeInTerminal` options.
16+
117
## 1.221.1
218

319
- Fix "No such file or directory" on MacOS

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,19 @@ Dart Scripts Runner will add a run button on each script line.
1515
Click that button to run the script.
1616

1717
![Edit run configuration](docs/images/dart-script-configuration.png)
18+
19+
## Example
20+
21+
```yaml
22+
scripts:
23+
# Without options:
24+
# directory: <project directory>
25+
# terminal: false
26+
pub_get: flutter pub get
27+
28+
# With options
29+
pod_install:
30+
script: pod install # Script text (required)
31+
directory: ./ios # Working directory (default: <project directory>)
32+
terminal: true # Should execute script in terminal? (default: false)
33+
```

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
}
55

66
group 'com.joutvhu.jetbrains'
7-
version '1.202.1'
7+
version '1.202.2'
88

99
sourceCompatibility = 11
1010

-29 KB
Loading

src/main/java/com/joutvhu/intellij/dartscripts/PubspecLineMarkerProvider.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,17 @@
1818
import org.jetbrains.yaml.psi.YAMLScalar;
1919
import org.jetbrains.yaml.psi.impl.YAMLBlockMappingImpl;
2020

21+
import java.util.HashMap;
22+
import java.util.Map;
23+
2124
public class PubspecLineMarkerProvider extends RunLineMarkerProvider {
2225
public static final String SCRIPT_KEY = "scripts";
26+
public static final String SCRIPT_TEXT_KEY = "script";
2327
public static final String PUBSPEC_FILE = "pubspec.yaml";
2428

2529
@Override
2630
public LineMarkerInfo<?> getLineMarkerInfo(@NotNull PsiElement element) {
2731
if (element instanceof YAMLKeyValue &&
28-
((YAMLKeyValue) element).getValue() instanceof YAMLScalar &&
2932
element.getParent() instanceof YAMLBlockMappingImpl &&
3033
element.getParent().getParent() instanceof YAMLKeyValue) {
3134
YAMLKeyValue scriptsElement = (YAMLKeyValue) element.getParent().getParent();
@@ -38,7 +41,9 @@ public LineMarkerInfo<?> getLineMarkerInfo(@NotNull PsiElement element) {
3841
if (doc.getParent() instanceof YAMLFile) {
3942
VirtualFile file = ((YAMLFile) doc.getParent()).getVirtualFile();
4043
if (!file.isDirectory() && PUBSPEC_FILE.equals(file.getName())) {
41-
return createMarkerInfo((YAMLKeyValue) element);
44+
Map<String, String> params = getActionParams((YAMLKeyValue) element);
45+
if (params != null && params.containsKey(SCRIPT_TEXT_KEY))
46+
return createMarkerInfo((YAMLKeyValue) element);
4247
}
4348
}
4449
}
@@ -54,4 +59,21 @@ private LineMarkerInfo<?> createMarkerInfo(YAMLKeyValue element) {
5459
actionGroup.add(new LineMarkerActionWrapper(element, action));
5560
return new RunLineMarkerInfo(element, AllIcons.Actions.Execute, psiElement -> "", actionGroup);
5661
}
62+
63+
public static Map<String, String> getActionParams(YAMLKeyValue element) {
64+
Map<String, String> params = new HashMap<>();
65+
if (element.getValue() instanceof YAMLScalar) {
66+
params.put(SCRIPT_TEXT_KEY, ((YAMLScalar) element.getValue()).getTextValue());
67+
return params;
68+
} else if (element.getValue() instanceof YAMLBlockMappingImpl) {
69+
YAMLBlockMappingImpl childBlock = (YAMLBlockMappingImpl) element.getValue();
70+
for (PsiElement child = childBlock.getFirstChild(); child != null; child = child.getNextSibling()) {
71+
if (child instanceof YAMLKeyValue && ((YAMLKeyValue) child).getValue() instanceof YAMLScalar) {
72+
params.put(((YAMLKeyValue) child).getKeyText(), ((YAMLKeyValue) child).getValueText());
73+
}
74+
}
75+
return params;
76+
}
77+
return null;
78+
}
5779
}

src/main/java/com/joutvhu/intellij/dartscripts/action/PubspecRunScriptAction.java

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,21 @@
1313
import com.intellij.psi.PsiElement;
1414
import com.intellij.psi.PsiFile;
1515
import com.joutvhu.intellij.dartscripts.LineMarkerActionWrapper;
16+
import com.joutvhu.intellij.dartscripts.PubspecLineMarkerProvider;
1617
import com.joutvhu.intellij.dartscripts.run.PubspecTerminalHelper;
1718
import org.jetbrains.annotations.NotNull;
1819
import org.jetbrains.annotations.Nullable;
1920
import org.jetbrains.yaml.psi.YAMLFile;
2021
import org.jetbrains.yaml.psi.YAMLKeyValue;
2122

2223
import javax.swing.*;
24+
import java.nio.file.Paths;
25+
import java.util.Map;
2326

2427
public class PubspecRunScriptAction extends AnAction {
2528
public static final String ID = "runPubspecScriptAction";
29+
public static final String DIRECTORY_KEY = "directory";
30+
public static final String TERMINAL_KEY = "terminal";
2631

2732
public PubspecRunScriptAction(
2833
@Nullable @NlsActions.ActionText String text,
@@ -38,12 +43,36 @@ public void actionPerformed(@NotNull AnActionEvent e) {
3843
PsiFile file = e.getData(CommonDataKeys.PSI_FILE);
3944
YAMLKeyValue element = getElement(e);
4045
if (project != null && file instanceof YAMLFile && element != null) {
41-
PubspecTerminalHelper.runScript(
42-
this.getExecutor(),
43-
e.getData(CommonDataKeys.PROJECT),
44-
element.getKeyText(),
45-
element.getValueText(),
46-
file.getVirtualFile().getParent().getPath());
46+
Map<String, String> params = PubspecLineMarkerProvider.getActionParams(element);
47+
if (params != null) {
48+
String scriptText = params.get(PubspecLineMarkerProvider.SCRIPT_TEXT_KEY);
49+
if (scriptText != null) {
50+
String workingDirectory = file.getVirtualFile().getParent().getPath();
51+
if (params.containsKey(DIRECTORY_KEY)) {
52+
workingDirectory = Paths.get(workingDirectory)
53+
.resolve(params.get(DIRECTORY_KEY))
54+
.normalize()
55+
.toAbsolutePath()
56+
.toString();
57+
}
58+
Boolean executeInTerminal = null;
59+
if (params.containsKey(TERMINAL_KEY)) {
60+
String terminalOption = params.get(TERMINAL_KEY);
61+
if ("true".equalsIgnoreCase(terminalOption) || "yes".equalsIgnoreCase(terminalOption))
62+
executeInTerminal = true;
63+
if ("false".equalsIgnoreCase(terminalOption) || "no".equalsIgnoreCase(terminalOption))
64+
executeInTerminal = false;
65+
}
66+
67+
PubspecTerminalHelper.runScript(
68+
this.getExecutor(),
69+
e.getData(CommonDataKeys.PROJECT),
70+
element.getKeyText(),
71+
scriptText,
72+
workingDirectory,
73+
executeInTerminal);
74+
}
75+
}
4776
}
4877
}
4978

src/main/java/com/joutvhu/intellij/dartscripts/run/PubspecTerminalHelper.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ public RunConfiguration runScript(
1717
Project project,
1818
String name,
1919
String script,
20-
String workingDirectory
20+
String workingDirectory,
21+
Boolean executeInTerminal
2122
) {
2223
RunManager runManager = RunManager.getInstance(project);
2324
DartScriptConfigurationType configurationType = ConfigurationTypeUtil
@@ -33,7 +34,7 @@ public RunConfiguration runScript(
3334

3435
DartScriptRunConfiguration runConfiguration = (DartScriptRunConfiguration) configurationSettings.getConfiguration();
3536
runConfiguration.setScriptText(script);
36-
runConfiguration.setExecuteInTerminal(false);
37+
runConfiguration.setExecuteInTerminal(Boolean.TRUE.equals(executeInTerminal));
3738
runConfiguration.setScriptWorkingDirectory(workingDirectory);
3839

3940
ExecutionEnvironmentBuilder builder = ExecutionEnvironmentBuilder

0 commit comments

Comments
 (0)