#+title: :lang graphql #+subtitle: Give queries a REST #+created: March 31, 2022 #+since: 22.04.0 (#6226) * Description :unfold: This module adds [[https://www.graphql.org][GraphQL]] support to Doom Emacs. It includes: - Code completion - LSP support ([[doom-module:+lsp]]) - Diagnostics (GraphQL syntax linting/validations) (spec-compliant) - Autocomplete suggestions (spec-compliant) - Hyperlink to fragment definitions and named types (type, input, enum) definitions (spec-compliant) - Outline view support for queries and SDL - Symbols support across the workspace - Local schema viewer - Org-babel exporter (requires [[doom-module::lang org]]) ** Maintainers - [[doom-user:][@elken]] [[doom-contrib-maintainer:][Become a maintainer?]] ** Module flags - +lsp :: Enable LSP support for ~graphql-mode~. Requires [[doom-module::tools lsp]] and a langserver ([[https://github.com/graphql/graphiql/tree/main/packages/graphql-language-service-cli#readme][graphql-language-service-cli]]). ** Packages - [[doom-package:company-graphql]] unless [[doom-module:+lsp]] - [[doom-package:graphql-mode]] - [[doom-package:graphql-doc]] ** Hacks - Added a convenience function [[fn:+graphql-doc-open-config]] to open schema docs from a [[https://github.com/jimkyndemeyer/graphql-config-examples][.graphqlconfig]] file. ** TODO Changelog # This section will be machine generated. Don't edit it by hand. /This module does not have a changelog yet./ * Installation [[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]] ** LSP This module has no direct requirements, but the +lsp flag requires a [[https://emacs-lsp.github.io/lsp-mode/page/lsp-graphql/][supported LSP server]]. ** Formatter Formatting is handled using the [[doom-module::editor format]] module via [[https://prettier.io/docs/en/install.html][prettier]]. * Usage ** Sending queries When visiting a graphql buffer, you have access to the ability to send the current query with =C-c C-c= which will prompt you for an optional variables file, then execute the query and return a buffer of the results. It's also possible to send queries using org-babel using a block such as the ones below (executing correctly will require =:lang org=) #+NAME: my-variables #+begin_src json { "continentCode": "AF" } #+end_src #+BEGIN_SRC graphql :url https://countries.trevorblades.com/ :variables my-variables query GetContinents($continentCode: String!) { continent(code: $continentCode) { name code } } #+END_SRC #+RESULTS: : { : "data": { : "continent": { : "name": "Africa", : "code": "AF" : } : } : } ** Viewing docs With this module, there are 3 ways to view schemas: + =+graphql-doc-open-config= which uses a local [[https://github.com/jimkyndemeyer/graphql-config-examples][=.graphqlconfig=]] file to seed endpoints to query + =graphql-doc= which prompts you to select an endpoint based on ones added manually by =graphql-doc-add-api= + =graphql-doc-open-url= which prompts to manually enter an endpoint url When using the doc viewer, there are a few bindings for navigating around. | Key | Command | Description | |-------------+---------------------+-----------------------------------| | =C-j= | =forward-button= | Follow a forward button | | =C-k= | =backward-button= | Follow a backward button | | == | =graphql-doc-go-back= | Go back to a previous page | | =mouse-1= | - | Follow the next label under =point= | | =RET= | - | Follow the next label under =point= | * Configuration Most of the "magic" in the module relies on a properly configured [[https://github.com/jimkyndemeyer/graphql-config-examples][.graphqlconfig]] file, so follow the examples linked to create an appropriate setup. LSP configuration is handled through [[https://github.com/graphql/graphiql/tree/main/packages/graphql-language-service-cli#graphql-configuration-file-graphqlrcyml][GraphQL Config]] to handle custom directives/documents/validation etc. These files will also be useful to other editors, so it would be worth checking them into version control. * Troubleshooting [[doom-report:][Report an issue?]] - [[https://github.com/ifitzpatrick/graphql-doc.el/issues][Issues with the doc viewer]] - [[https://github.com/davazp/graphql-mode/issues][Issues with graphql-mode]] - [[https://github.com/emacs-lsp/lsp-mode/issues][Issues with LSP]] ([[https://github.com/graphql/graphiql/issues][Upstream LSP issues]]) * Frequently asked questions /This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]] * TODO Appendix #+begin_quote 󱌣 This module has no appendix yet. [[doom-contrib-module:][Write one?]] #+end_quote