• This repository has been archived on 31/Jul/2022
  • Stars
    star
    555
  • Rank 80,213 (Top 2 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 6 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

MIGRATED: VSCode GraphQL extension (autocompletion, go-to definition, syntax highlighting)

VSCode GraphQL [ARCHIVED]

The extension has been moved to graphql/graphiql monorepo - please open all new tickets and PRs there. Operation execution support was temporarily dropped and is planned to be replaced before 2023. Another useful operation exection extension that works inline is vscode-graphiql-explorer. Another handy extension - graphql notebooks provides a UX where you can keep graphql "notebooks" using the vscode notebooks API.

GraphQL extension for VSCode was built with the aim to tightly integrate the GraphQL Ecosystem with VSCode for an awesome developer experience.

๐Ÿ’ก Note: This extension no longer supports .prisma files. If you are using this extension with GraphQL 1, please rename your datamodel from datamodel.prisma to datamodel.graphql and this extension will pick that up.

Features

Lots of new improvements happening! We now have a CHANGELOG.md

General features

  • Load the extension on detecting graphql-config file at root level or in a parent level directory
  • Load the extension in .graphql, .gql files
  • Load the extension on detecting gql tag in js, ts, jsx, tsx, vue files
  • Load the extension inside gql/graphql fenced code blocks in markdown files
  • execute query/mutation/subscription operation, embedded or in graphql files
  • pre-load schema and document defintitions
  • Support graphql-config files with one project and multiple projects
  • the language service re-starts on changes to vscode settings and/or graphql config!

.graphql, .gql file extension support

  • syntax highlighting (type, query, mutation, interface, union, enum, scalar, fragments, directives)
  • autocomplete suggestions
  • validation against schema
  • snippets (interface, type, input, enum, union)
  • hover support
  • go to definition support (input, enum, type)
  • outline support

gql/graphql tagged template literal support for tsx, jsx, ts, js

  • syntax highlighting (type, query, mutation, interface, union, enum, scalar, fragments, directives)
  • autocomplete suggestions
  • validation against schema
  • snippets
  • hover support
  • go to definition for fragments and input types
  • outline support

Usage

Install the VSCode GraphQL Extension.

(Watchman is no longer required, you can uninstall it now)

This extension requires a graphql-config file.

As of [email protected] we support graphql-config@3. You can read more about that here. Because it now uses cosmicconfig there are plenty of new options for loading config files:

graphql.config.json
graphql.config.js
graphql.config.yaml
graphql.config.yml
.graphqlrc (YAML or JSON)
.graphqlrc.json
.graphqlrc.yaml
.graphqlrc.yml
.graphqlrc.js
graphql property in package.json

the file needs to be placed at the project root by default, but you can configure paths per project. see the FAQ below for details.

Previous versions of this extension support graphql-config@2 format, which follows legacy configuration patterns

If you need legacy support for .graphqlconfig files or older graphql-config formats, see this FAQ answer. If you are missing legacy graphql-config features, please consult the graphql-config repository.

To support language features like "go-to definition" across multiple files, please include documents key in the graphql-config file default or per-project (this was include in 2.0).

Configuration Examples

Simple Example

# .graphqlrc.yml
schema: "schema.graphql"
documents: "src/**/*.{graphql,js,ts,jsx,tsx}"

Advanced Example

// graphql.config.js
module.exports = {
  projects: {
    app: {
      schema: ["src/schema.graphql", "directives.graphql"],
      documents: ["**/*.{graphql,js,ts,jsx,tsx}", "my/fragments.graphql"],
      extensions: {
        endpoints: {
          default: {
            url: "http://localhost:8000",
            headers: { Authorization: `Bearer ${process.env.API_TOKEN}` },
          },
        },
      },
    },
    db: {
      schema: "src/generated/db.graphql",
      documents: ["src/db/**/*.graphql", "my/fragments.graphql"],
      extensions: {
        codegen: [
          {
            generator: "graphql-binding",
            language: "typescript",
            output: {
              binding: "src/generated/db.ts",
            },
          },
        ],
        endpoints: {
          default: {
            url: "http://localhost:8080",
            headers: { Authorization: `Bearer ${process.env.API_TOKEN}` },
          },
        },
      },
    },
  },
}

Notice that documents key supports glob pattern and hence ["**/*.graphql"] is also valid.

Frequently Asked Questions

I can't load .graphqlconfig files anymore

If you need to use a legacy config file, then you just need to enable legacy mode for graphql-config:

"graphql-config.load.legacy": true

Go to definition is not working for my URL

You can try the new experimental cacheSchemaFileForLookup option. NOTE: this will disable all definition lookup for local SDL graphql schema files, and only perform lookup of the result an SDL result of graphql-config getSchema()

To enable, add this to your settings:

"vscode-graphql.cacheSchemaFileForLookup": true,

you can also use graphql config if you need to mix and match these settings:

schema: http://myschema.com/graphql
extensions:
  languageService:
    cacheSchemaFileForLookup: true
projects:
  project1:
    schema: project1/schema/schema.graphql
    documents: project1/queries/**/*.{graphql,tsx,jsx,ts,js}
    extensions:
      languageService:
      cacheSchemaFileForLookup: false

  project2:
    schema: https://api.spacex.land/graphql/
    documents: project2/queries.graphql
    extensions:
      endpoints:
        default:
          url: https://api.spacex.land/graphql/
      languageService:
        # Do project configs inherit parent config?
        cacheSchemaFileForLookup: true

The extension fails with errors about duplicate types

Make sure that you aren't including schema files in the documents blob

The extension fails with errors about missing scalars, directives, etc

Make sure that your schema pointers refer to a complete schema!

In JSX and TSX files I see completion items I don't need

The way vscode lets you filter these out is on the user end

So you'll need to add something like this to your global vscode settings:

"[typescriptreact]": {
  "editor.suggest.filteredTypes": {
    "snippet": false
  }
},
"[javascriptreact]": {
  "editor.suggest.filteredTypes": {
    "snippet": false
  }
}

"Execute Query/Mutation/Subscription" always fails

The best way to make "execute " codelens work is to add endpoints config to the global graphql config or the project config.

This would look like:

export default {
  schema: "mschema.graphql",
  extension: {
    endpoints: {
      default: "http://localhost:9000",
    },
  },
}

(see above for per-project examples)

If there is an issue with execution that has to do with your server, the error response should show now in the result panel.

In case the request fails due to self signed certificate, you can bypass that check by adding this to your settings:

"vscode-graphql.rejectUnauthorized": false

My graphql config file is not at the root

Good news, we have configs for this now!

You can search a folder for any of the matching config file names listed above:

"graphql-config.load.rootDir": "./config"

Or a specific filepath:

"graphql-config.load.filePath": "./config/my-graphql-config.js"

Or a different configName that allows different formats:

"graphql-config.load.rootDir": "./config",
"graphql-config.load.configName": "acme"

which would search for ./config/.acmerc, .config/.acmerc.js, .config/acme.config.json, etc matching the config paths above

If you have multiple projects, you need to define one top-level config that defines all project configs using projects

How do I highlight an embedded graphql string?

If you aren't using a template tag function such as gql or graphql, and just want to use a plain string, you can use an inline #graphql comment:

const myQuery = `#graphql
  query {
    something
  }
`

or

  const myQuery =
  /* GraphiQL */ 
`
  query {
    something
  }
`

Template literal expressions dont work with Execute Query

Experimental support for template literal expressions ala ${} has been added for language support, which just add an empty newline behind the scenes. It does not yet work for Execute Query codelans.

Known Issues

  • the output channel occasionally shows "definition not found" when you first start the language service, but once the definition cache is built for each project, definition lookup will work. so if a "peek definition" fails when you first start the editor or when you first install the extension, just try the definition lookup again.

Development

This plugin uses the GraphQL language server

  1. Clone the repository - https://github.com/graphql/vscode-graphql
  2. npm install
  3. Open it in VSCode
  4. Go to the debugging section and run the launch program "Extension"
  5. This will open another VSCode instance with extension enabled
  6. Open a project with a graphql config file - "๐Ÿ”Œ graphql" in VSCode status bar indicates that the extension is in use
  7. Logs for GraphQL language service will appear in output section under GraphQL Language Service GraphQL Language Service Logging

Contributing back to this project

This repository is managed by EasyCLA. Project participants must sign the free (GraphQL Specification Membership agreement before making a contribution. You only need to do this one time, and it can be signed by individual contributors or their employers.

To initiate the signature process please open a PR against this repo. The EasyCLA bot will block the merge if we still need a membership agreement from you.

You can find detailed information here. If you have issues, please email [email protected].

If your company benefits from GraphQL and you would like to provide essential financial support for the systems and people that power our community, please also consider membership in the GraphQL Foundation.

License

MIT

More Repositories

1

graphql-js

A reference implementation of GraphQL for JavaScript
TypeScript
20,017
star
2

graphiql

GraphiQL & the GraphQL LSP Reference Ecosystem for building browser & IDE tools.
TypeScript
16,071
star
3

graphql-spec

GraphQL is a query language and execution engine tied to any backend service.
Shell
14,293
star
4

dataloader

DataLoader is a generic utility to be used as part of your application's data fetching layer to provide a consistent API over various backends and reduce requests to those backends via batching and caching.
JavaScript
12,787
star
5

graphql-playground

๐ŸŽฎ GraphQL IDE for better development workflows (GraphQL Subscriptions, interactive docs & collaboration)
TypeScript
8,766
star
6

express-graphql

Create a GraphQL HTTP server with Express.
TypeScript
6,341
star
7

graphql-relay-js

A library to help construct a graphql-js server supporting react-relay.
TypeScript
1,537
star
8

libgraphqlparser

A GraphQL query parser in C++ with C and C++ APIs
C++
1,069
star
9

swapi-graphql

A GraphQL schema and server wrapping SWAPI.
JavaScript
1,039
star
10

graphql.github.io

GraphQL Documentation at graphql.org
MDX
830
star
11

graphql-wg

Working group notes for GraphQL
JavaScript
528
star
12

graphql-language-service

An interface for building GraphQL language services for IDEs
420
star
13

graphql-over-http

Working draft of "GraphQL over HTTP" specification
JavaScript
386
star
14

graphql-landscape

๐ŸŒ„Landscape for the GraphQL ecosystem
308
star
15

graphql-http

Simple, pluggable, zero-dependency, GraphQL over HTTP spec compliant server, client and audit suite.
TypeScript
300
star
16

codemirror-graphql

GraphQL mode and helpers for CodeMirror.
148
star
17

foundation

GraphQL Foundation Charter and Legal Documents
87
star
18

composite-schemas-wg

The GraphQL Composite Schemas WG (subcommittee)
JavaScript
62
star
19

graphql-scalars

GraphQL Scalars specifications repo.
Shell
41
star
20

faq

GraphQL FAQ
37
star
21

defer-stream-wg

Repository for discussions on the GraphQL defer-stream spec proposal
JavaScript
28
star
22

nullability-wg

JavaScript
27
star
23

graphql-js-wg

Working group notes for graphql-js
JavaScript
25
star
24

composite-schemas-spec

Shell
22
star
25

marketing

Foundation marketing work
HTML
13
star
26

EasyCLA

Test repo for setting up EasyCLA, the tool we'll use to manage specification membership sigs
5
star
27

graphql-directory

The GraphQL Directory is used to manage project mailing lists
Python
4
star
28

wg-template

A template for GraphQL subcommittees
1
star
29

.github

Default community health files for GraphQL Foundation
1
star