Skip to content

Commit 9893de9

Browse files
committed
Query result enhancements (#11)
- Support for GraphQL scratch files - Invoke reformat code action on query result
1 parent 882ddf3 commit 9893de9

File tree

7 files changed

+49
-11
lines changed

7 files changed

+49
-11
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## 1.3.0 (2016-05-21)
2+
3+
Features:
4+
5+
- Support for GraphQL scratch files
6+
- Invoke reformat code action on query result
7+
18
## 1.2.0 (2016-03-14)
29

310
Features:

resources/META-INF/plugin.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<idea-plugin version="2">
1111
<id>com.intellij.lang.jsgraphql</id>
1212
<name>JS GraphQL</name>
13-
<version>1.2.0</version>
13+
<version>1.3.0</version>
1414
<vendor>Jim Kynde Meyer - [email protected]</vendor>
1515

1616
<description><![CDATA[
@@ -29,6 +29,7 @@
2929

3030
<change-notes><![CDATA[
3131
<ul>
32+
<li>1.3.0: Adds support for GraphQL Scratch Files. Query results are now formatted.</li>
3233
<li>1.2.0: Contextual query support: Execute buffer, selection, or named operations at the caret position in the GraphQL editor</li>
3334
<li>1.1.1: Completion after ... fragment spread operator. Language Service 1.1.1 based on graphql 0.4.16 and codemirror-graphql 0.2.2</li>
3435
<li>1.1.0: Find usages, schema viewer, structure view</li>

src/main/com/intellij/lang/jsgraphql/JSGraphQLFileType.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@
77
*/
88
package com.intellij.lang.jsgraphql;
99

10+
import com.intellij.ide.scratch.ScratchFileType;
1011
import com.intellij.lang.jsgraphql.icons.JSGraphQLIcons;
1112
import com.intellij.openapi.fileTypes.LanguageFileType;
13+
import com.intellij.openapi.project.Project;
14+
import com.intellij.openapi.vfs.VirtualFile;
15+
import com.intellij.psi.PsiFile;
16+
import com.intellij.psi.PsiManager;
1217
import org.jetbrains.annotations.NotNull;
1318
import org.jetbrains.annotations.Nullable;
1419

@@ -45,4 +50,20 @@ public String getDefaultExtension() {
4550
public Icon getIcon() {
4651
return JSGraphQLIcons.Files.GraphQL;
4752
}
53+
54+
/**
55+
* Scratch virtual files don't return their actual file type, so we need to find the PsiFile to determine
56+
* whether it's a GraphQL scratch file
57+
* @return true if the scratch file contains a GraphQL PsiFile
58+
*/
59+
public static boolean isGraphQLScratchFile(Project project, VirtualFile file) {
60+
if(file.getFileType() instanceof ScratchFileType) {
61+
final PsiManager psiManager = PsiManager.getInstance(project);
62+
final PsiFile psiFile = psiManager.findFile(file);
63+
if(psiFile != null && psiFile.getFileType() == JSGraphQLFileType.INSTANCE) {
64+
return true;
65+
}
66+
}
67+
return false;
68+
}
4869
}

src/main/com/intellij/lang/jsgraphql/ide/actions/JSGraphQLExecuteEditorAction.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ public void update(AnActionEvent e) {
4343
@Override
4444
public void actionPerformed(AnActionEvent e) {
4545
VirtualFile virtualFile = e.getData(CommonDataKeys.VIRTUAL_FILE);
46-
if(isQueryableFile(virtualFile)) {
47-
final Project project = e.getData(CommonDataKeys.PROJECT);
46+
final Project project = e.getData(CommonDataKeys.PROJECT);
47+
if(isQueryableFile(project, virtualFile)) {
4848
Editor editor = e.getData(CommonDataKeys.EDITOR);
4949
if(project != null && editor instanceof EditorEx) {
5050
final Boolean querying = Boolean.TRUE.equals(editor.getUserData(JSGraphQLLanguageUIProjectService.JS_GRAPH_QL_EDITOR_QUERYING));
@@ -63,11 +63,14 @@ public void actionPerformed(AnActionEvent e) {
6363
}
6464
}
6565

66-
private boolean isQueryableFile(VirtualFile virtualFile) {
66+
private boolean isQueryableFile(Project project, VirtualFile virtualFile) {
6767
if(virtualFile != null) {
6868
if(virtualFile.getFileType() == JSGraphQLFileType.INSTANCE) {
6969
return true;
7070
}
71+
if(JSGraphQLFileType.isGraphQLScratchFile(project, virtualFile)) {
72+
return true;
73+
}
7174
if(virtualFile.getFileType() == JsonFileType.INSTANCE && Boolean.TRUE.equals(virtualFile.getUserData(JSGraphQLLanguageUIProjectService.IS_GRAPH_QL_VARIABLES_VIRTUAL_FILE))) {
7275
return true;
7376
}

src/main/com/intellij/lang/jsgraphql/ide/project/JSGraphQLLanguageUIProjectService.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.google.common.collect.Maps;
1212
import com.google.gson.Gson;
1313
import com.google.gson.JsonSyntaxException;
14+
import com.intellij.codeInsight.actions.ReformatCodeProcessor;
1415
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
1516
import com.intellij.execution.filters.UrlFilter;
1617
import com.intellij.execution.process.OSProcessHandler;
@@ -49,6 +50,7 @@
4950
import com.intellij.openapi.actionSystem.*;
5051
import com.intellij.openapi.application.ApplicationManager;
5152
import com.intellij.openapi.components.ServiceManager;
53+
import com.intellij.openapi.editor.Document;
5254
import com.intellij.openapi.editor.Editor;
5355
import com.intellij.openapi.editor.ex.EditorEx;
5456
import com.intellij.openapi.editor.impl.EditorHeaderComponent;
@@ -63,6 +65,7 @@
6365
import com.intellij.openapi.vfs.VirtualFileManager;
6466
import com.intellij.openapi.wm.ToolWindow;
6567
import com.intellij.openapi.wm.ToolWindowManager;
68+
import com.intellij.psi.PsiDocumentManager;
6669
import com.intellij.psi.PsiFile;
6770
import com.intellij.psi.util.PsiUtilCore;
6871
import com.intellij.testFramework.LightVirtualFile;
@@ -295,7 +298,7 @@ private void reloadEndpoints(List<JSGraphQLEndpoint> newEndpoints) {
295298
// -- editor header component --
296299

297300
private void insertEditorHeaderComponentIfApplicable(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
298-
if(file.getFileType() == JSGraphQLFileType.INSTANCE) {
301+
if(file.getFileType() == JSGraphQLFileType.INSTANCE || JSGraphQLFileType.isGraphQLScratchFile(source.getProject(), file)) {
299302
FileEditor fileEditor = source.getSelectedEditor(file);
300303
if (fileEditor instanceof TextEditor) {
301304
final Editor editor = ((TextEditor) fileEditor).getEditor();
@@ -424,7 +427,14 @@ public void executeGraphQL(Editor editor, VirtualFile virtualFile) {
424427
final TextEditor textEditor = (TextEditor) fileEditor;
425428
UIUtil.invokeLaterIfNeeded(() -> {
426429
ApplicationManager.getApplication().runWriteAction(() -> {
427-
textEditor.getEditor().getDocument().setText(responseJson);
430+
final Document document = textEditor.getEditor().getDocument();
431+
document.setText(responseJson);
432+
if(requestJson.startsWith("{")) {
433+
final PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(document);
434+
if (psiFile != null) {
435+
new ReformatCodeProcessor(psiFile, false).run();
436+
}
437+
}
428438
});
429439
final StringBuilder queryResultText = new StringBuilder(virtualFile.getName()).
430440
append(": ").

src/test/com/intellij/lang/jsgraphql/JSGraphQLCodeInsightTest.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,8 @@
1010
import com.intellij.lang.jsgraphql.languageservice.CodeMirrorNodeLanguageServiceClientTest;
1111
import com.intellij.lang.jsgraphql.languageservice.JSGraphQLNodeLanguageServiceInstance;
1212
import com.intellij.openapi.command.WriteCommandAction;
13-
import com.intellij.openapi.module.impl.ModuleImpl;
14-
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess;
1513
import com.intellij.psi.codeStyle.CodeStyleManager;
1614
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
17-
import com.intellij.testFramework.PsiTestUtil;
1815
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
1916
import org.junit.Test;
2017

@@ -24,7 +21,6 @@
2421
public class JSGraphQLCodeInsightTest extends LightCodeInsightFixtureTestCase {
2522
@Override
2623
protected void setUp() throws Exception {
27-
VfsRootAccess.SHOULD_PERFORM_ACCESS_CHECK = false; // TODO: a workaround for v15
2824

2925
// TODO: This test depends on a running JS GraphQL Language service at http://localhost:3000
3026
// TODO: Fix: This test requires comments around <depends>JavaScript</depends> and <depends>NodeJS</depends> in plugin.xml as a work-around to IDEA's complaint about missing 'NodeJS' and 'JavaScriptDebugger' plugins

0 commit comments

Comments
 (0)