Skip to content

Commit 3a821fe

Browse files
committed
Implement support for GraphQL Schema Language (#3)
1 parent 67ba364 commit 3a821fe

File tree

84 files changed

+3695
-463
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+3695
-463
lines changed

DEVELOPING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- Add all jars in `<intellij home>/plugins/JavaScriptLanguage`
55
- Add the NodeNS.jar in `<user home>/.IntelliJIdea15/config/plugins/NodeJS/lib`
66
- Add the IntelliLang.jar in `<user home>/.IntelliJIdea15/config/plugins/IntelliLang/lib`
7+
- Add the netty-all-*.jar in `<intellij home>/lib`
78

89
## Setting up Intellij Community (OpenApi) sources:
910
- https://github.com/JetBrains/intellij-plugins/tree/master/Dart

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ GraphQL language support including Relay.QL tagged templates in JavaScript and T
66

77
It provides the following features in IntelliJ IDEA and WebStorm:
88

9-
- Schema-aware completion and error highlighting
9+
- Schema-aware completion, error highlighting, and documentation
1010
- Syntax highlighting, code-formatting, folding, commenter, and brace-matching
11+
- 'Find Usages' and 'Go to Declaration' for schema types and fields
12+
- Schema viewer and 'Go to Implementation' for schema interfaces
13+
- 'Structure view' to navigate GraphQL and GraphQL Schema files
1114
- Configurable GraphQL schema retrieval and reloading based on a local file or a url using 'then-request'
12-
- View and browse the schema documentation in-editor using Ctrl/Cmd+Click or the documentation tool window
1315
- Execute queries with variables against configurable endpoints
1416

1517
It depends on [js-graphql-language-service](https://github.com/jimkyndemeyer/js-graphql-language-service) that it manages using a Node.js process handler.

resources/META-INF/plugin.xml

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,19 @@
1010
<idea-plugin version="2">
1111
<id>com.intellij.lang.jsgraphql</id>
1212
<name>JS GraphQL</name>
13-
<version>1.0.0</version>
13+
<version>1.1.0</version>
1414
<vendor>Jim Kynde Meyer - [email protected]</vendor>
1515

1616
<description><![CDATA[
1717
<p>GraphQL language support including Relay.QL tagged templates in JavaScript and TypeScript.</p>
1818
<p>Provides the following features:</p>
1919
<ul>
20-
<li>Schema-aware completion and error highlighting</li>
20+
<li>Schema-aware completion, error highlighting, and documentation</li>
2121
<li>Syntax highlighting, code-formatting, folding, commenter, and brace-matching</li>
22+
<li>'Find Usages' and 'Go to Declaration' for schema types and fields</li>
23+
<li>Schema viewer and 'Go to Implementation' for schema interfaces</li>
24+
<li>'Structure view' to navigate GraphQL and GraphQL Schema files</li>
2225
<li>Configurable GraphQL schema retrieval and reloading based on a local file or a url using 'then-request'</li>
23-
<li>View and browse the schema documentation in-editor using Ctrl/Cmd+Click or the documentation tool window</li>
2426
<li>Execute queries with variables against configurable endpoints</li>
2527
</ul>
2628
]]></description>
@@ -44,20 +46,32 @@
4446

4547
<extensions defaultExtensionNs="com.intellij">
4648

47-
<!-- Project Language service -->
49+
<!-- Project Language services -->
4850
<projectService serviceInterface="com.intellij.lang.jsgraphql.ide.project.JSGraphQLLanguageUIProjectService" serviceImplementation="com.intellij.lang.jsgraphql.ide.project.JSGraphQLLanguageUIProjectService" />
51+
<projectService serviceInterface="com.intellij.lang.jsgraphql.schema.ide.project.JSGraphQLSchemaLanguageProjectService" serviceImplementation="com.intellij.lang.jsgraphql.schema.ide.project.JSGraphQLSchemaLanguageProjectService" />
52+
<projectService serviceInterface="com.intellij.lang.jsgraphql.ide.configuration.JSGraphQLConfigurationProvider" serviceImplementation="com.intellij.lang.jsgraphql.ide.configuration.JSGraphQLConfigurationProvider" />
4953

50-
<!-- File type -->
54+
55+
<!-- Project tree -->
56+
<treeStructureProvider implementation="com.intellij.lang.jsgraphql.schema.ide.project.JSGraphQLSchemaTreeStructureProvider" />
57+
58+
59+
<!-- File types -->
5160
<fileTypeFactory implementation="com.intellij.lang.jsgraphql.JSGraphQLFileTypeFactory"/>
61+
<fileTypeFactory implementation="com.intellij.lang.jsgraphql.schema.JSGraphQLSchemaFileTypeFactory"/>
5262
<internalFileTemplate name="GraphQL File"/>
5363

5464

5565
<!-- Language -->
5666
<lang.parserDefinition language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.JSGraphQLParserDefinition"/>
67+
<lang.parserDefinition language="GraphQL Schema" implementationClass="com.intellij.lang.jsgraphql.schema.JSGraphQLSchemaParserDefinition"/>
5768
<lang.syntaxHighlighterFactory language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.highlighting.JSGraphQLSyntaxHighlighterFactory"/>
69+
<lang.syntaxHighlighterFactory language="GraphQL Schema" implementationClass="com.intellij.lang.jsgraphql.ide.highlighting.JSGraphQLSyntaxHighlighterFactory"/>
5870
<lang.commenter language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.editor.JSGraphQLCommenter"/>
5971
<lang.braceMatcher language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.editor.JSGraphQLBraceMatcher" />
60-
72+
<lang.fileViewProviderFactory language="GraphQL Schema" implementationClass="com.intellij.lang.jsgraphql.schema.psi.JSGraphQLSchemaFileViewProviderFactory" />
73+
<lang.psiStructureViewFactory language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.structureView.JSGraphQLPsiStructureViewFactory"/>
74+
<lang.psiStructureViewFactory language="GraphQL Schema" implementationClass="com.intellij.lang.jsgraphql.ide.structureView.JSGraphQLPsiStructureViewFactory"/>
6175

6276
<!-- Completion -->
6377
<completion.contributor language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.completion.JSGraphQLCompletionContributor"/>
@@ -67,21 +81,33 @@
6781
<externalAnnotator language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.annotator.JSGraphQLAnnotator" />
6882
<externalAnnotator language="JavaScript" implementationClass="com.intellij.lang.jsgraphql.ide.annotator.JSGraphQLAnnotator" />
6983
<externalAnnotator language="TypeScript" implementationClass="com.intellij.lang.jsgraphql.ide.annotator.JSGraphQLAnnotator" /><!-- Own reg required -->
70-
<annotator language="JSX Harmony" implementationClass="com.intellij.lang.jsgraphql.ide.annotator.JSGraphQLRelayTemplateAnnotator" />
71-
<annotator language="TypeScript JSX" implementationClass="com.intellij.lang.jsgraphql.ide.annotator.JSGraphQLRelayTemplateAnnotator" />
84+
<annotator language="JavaScript" implementationClass="com.intellij.lang.jsgraphql.ide.annotator.JSGraphQLRelayTemplateAnnotator" /><!-- Using the JSX dialect overwrites the default annotator -->
85+
<annotator language="TypeScript" implementationClass="com.intellij.lang.jsgraphql.ide.annotator.JSGraphQLRelayTemplateAnnotator" /><!-- Using the JSX dialect overwrites the default annotator -->
7286

7387

7488
<!-- Formatting -->
7589
<lang.formatter language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.formatter.JSGraphQLFormattingModelBuilder"/>
7690
<lang.formatter language="JavaScript" implementationClass="com.intellij.lang.jsgraphql.ide.formatter.JSGraphQLInjectedFormattingModelBuilder" />
7791
<lang.formatter language="TypeScript" implementationClass="com.intellij.lang.jsgraphql.ide.formatter.JSGraphQLInjectedFormattingModelBuilder" /><!-- Own reg required -->
7892
<lang.foldingBuilder language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.editor.JSGraphQLFoldingBuilder"/>
93+
<lang.foldingBuilder language="GraphQL Schema" implementationClass="com.intellij.lang.jsgraphql.ide.editor.JSGraphQLFoldingBuilder"/>
7994
<lang.quoteHandler language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.editor.JSGraphQLQuoteHandler" />
8095
<enterHandlerDelegate implementation="com.intellij.lang.jsgraphql.ide.formatter.JSGraphQLEnterHandlerDelegate" />
8196

8297

98+
<!-- Find usages -->
99+
<lang.findUsagesProvider language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.findUsages.JSGraphQLFindUsagesProvider" />
100+
<usageTypeProvider implementation="com.intellij.lang.jsgraphql.ide.findUsages.JSGraphQLUsageTypeProvider" />
101+
<findUsagesHandlerFactory id="GraphQL" implementation="com.intellij.lang.jsgraphql.ide.findUsages.JSGraphQLFindUsagesHandlerFactory"/>
102+
103+
104+
<!-- Renaming -->
105+
<vetoRenameCondition implementation="com.intellij.lang.jsgraphql.ide.rename.JSGraphQLRenameVetoCondition" />
106+
107+
83108
<!-- Schema documentation -->
84109
<lang.documentationProvider language="GraphQL" implementationClass="com.intellij.lang.jsgraphql.ide.documentation.JSGraphQLDocumentationProvider" />
110+
<lang.documentationProvider language="GraphQL Schema" implementationClass="com.intellij.lang.jsgraphql.ide.documentation.JSGraphQLDocumentationProvider" />
85111
<!-- Note: JSX/TSX documentation providers are registered in their base language (JS), so we do the same to not take over the entire doc impl -->
86112
<lang.documentationProvider language="JavaScript" implementationClass="com.intellij.lang.jsgraphql.ide.documentation.JSGraphQLDocumentationProvider" />
87113

@@ -102,6 +128,11 @@
102128
<!-- Query execution (see com.intellij.openapi.actionSystem.IdeActions.ACTION_EDITOR_SPLIT which is ctrl+enter by default) -->
103129
<editorActionHandler action="EditorSplitLine" implementationClass="com.intellij.lang.jsgraphql.ide.actions.JSGraphQLExecuteEditorActionHandler" order="first" />
104130
<highlightErrorFilter implementation="com.intellij.lang.jsgraphql.ide.editor.JSGraphQLVariablesHighlightErrorFilter" />
131+
132+
133+
<!-- Search (find implementations etc.) -->
134+
<definitionsSearch implementation="com.intellij.lang.jsgraphql.schema.ide.search.JSGraphQLDefinitionsSearchExecutor"/>
135+
105136
</extensions>
106137

107138
<actions>

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
import com.intellij.openapi.fileTypes.FileTypeFactory;
1212
import org.jetbrains.annotations.NotNull;
1313

14-
public class JSGraphQLFileTypeFactory extends FileTypeFactory{
14+
public class JSGraphQLFileTypeFactory extends FileTypeFactory {
1515
@Override
1616
public void createFileTypes(@NotNull FileTypeConsumer fileTypeConsumer) {
17-
fileTypeConsumer.consume(JSGraphQLFileType.INSTANCE, "graphql");
17+
fileTypeConsumer.consume(JSGraphQLFileType.INSTANCE, JSGraphQLFileType.INSTANCE.getDefaultExtension());
1818
}
1919
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* Copyright (c) 2015, Jim Kynde Meyer
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
package com.intellij.lang.jsgraphql;
9+
10+
public interface JSGraphQLKeywords {
11+
12+
// graphql
13+
String QUERY = "query";
14+
String FRAGMENT = "fragment";
15+
String FRAGMENT_DOTS = "...";
16+
String FRAGMENT_ON = "on";
17+
String MUTATION = "mutation";
18+
String SUBSCRIPTION = "subscription";
19+
20+
// graphql schema
21+
String TYPE = "type";
22+
String INTERFACE = "interface";
23+
String UNION = "union";
24+
String SCALAR = "scalar";
25+
String ENUM = "enum";
26+
String INPUT = "input";
27+
String EXTEND = "extend";
28+
29+
30+
}

src/main/com/intellij/lang/jsgraphql/icons/JSGraphQLIcons.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public static class Logos {
2020

2121
public static class Files {
2222
public static final Icon GraphQL = JSGraphQLIcons.load("/com/intellij/lang/jsgraphql/icons/graphql-file.png");
23+
public static final Icon GraphQLSchema = JSGraphQLIcons.load("/com/intellij/lang/jsgraphql/icons/graphql-schema-file.png");
2324
}
2425

2526
public static class UI {
@@ -30,7 +31,14 @@ public static class UI {
3031
public static class Schema {
3132
public static final Icon Field = JSGraphQLIcons.load("/com/intellij/lang/jsgraphql/icons/field.png");
3233
public static final Icon Scalar = JSGraphQLIcons.load("/com/intellij/lang/jsgraphql/icons/scalar.png");
34+
public static final Icon Enum = JSGraphQLIcons.load("/com/intellij/lang/jsgraphql/icons/enum.png");
3335
public static final Icon Type = JSGraphQLIcons.load("/com/intellij/lang/jsgraphql/icons/type.png");
36+
public static final Icon Interface = JSGraphQLIcons.load("/com/intellij/lang/jsgraphql/icons/interface.png");
37+
public static final Icon Query = JSGraphQLIcons.load("/com/intellij/lang/jsgraphql/icons/query.png");
38+
public static final Icon Attribute = JSGraphQLIcons.load("/com/intellij/lang/jsgraphql/icons/attribute.png");
39+
public static final Icon Subscription = JSGraphQLIcons.load("/com/intellij/lang/jsgraphql/icons/subscription.png");
40+
public static final Icon Mutation = JSGraphQLIcons.load("/com/intellij/lang/jsgraphql/icons/mutation.png");
41+
public static final Icon Fragment = JSGraphQLIcons.load("/com/intellij/lang/jsgraphql/icons/fragment.png");
3442
}
3543

3644
private static Icon load(String path) {
1.3 KB
Loading
1.88 KB
Loading
271 Bytes
Loading
491 Bytes
Loading

0 commit comments

Comments
 (0)