jaredly / jaredly/reason-language-server

Crash when `graphql_ppx` raises compile time error

Open
#158 4 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
OCaml
Stars
649
Forks
85
PR merge metrics
No merged PRs in 30d

Description

When `graphql_ppx` raises compile time error RLS hangs w/ 100% CPU.

Log

```
{"jsonrpc":"2.0","method":"textDocument/didSave","params":{"textDocument":{"uri":"file:///Users/Alex/Dev/Projects/app/web/src/models/domain/User.re","version":1}}}
>> Build system: /Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/bsb.exe -make-world
ninja: no work to do.
ninja: no work to do.
ninja: no work to do.
ninja: no work to do.
ninja: no work to do.
ninja: no work to do.
ninja: no work to do.
ninja: no work to do.
ninja: no work to do.
[1/2] Building src/models/domain/User.mlast
[2/2] Building src/models/domain/User.mlast.d
[1/4] Building src/models/domain/User.cmj
[2/4] Building src/models/domain/Auth.cmj
[3/4] Building src/ui/auth/SignupForm.cmj
[4/4] Building src/api/mutations/SignupMutation.cmj

We've found a bug for you!
(No file name)

Some record fields are undefined: createdAt

>> Error

Affected files file://(No
Cleaning bsconfig.json
Sending notification {"jsonrpc": "2.0", "method": "textDocument/publishDiagnostics", "params": {"uri": "file:///Users/Alex/Dev/Projects/app/web/bsconfig.json", "diagnostics": []}}
Running diagnostics for file:///Users/Alex/Dev/Projects/app/web/src/api/mutations/SignupMutation.re
running bsc /Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/bsc.exe -c -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/ui' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/ui/auth' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/ui/layout' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/locales' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/locales/extractor' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/locales/translations' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/shell' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/models' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/models/domain' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/libs' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/forms' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/forms/TextField' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/.ui' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/styles' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Svg' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Portal' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Spinner' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Headings' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Button' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Logo' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Icon' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Modal' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Control' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/icons' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/api' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/api/transport' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/api/mutations' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/api/queries' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/bindings' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/services' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/ocaml' -I '/Users/Alex/Dev/Projects/app/node_modules/@glennsl/bs-json/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-react-intl/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/core' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/file' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/canvas' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/ranges' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/css' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/nodes' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/html' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/sets' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/traversal' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/selection' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/geometry' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/events' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/validation' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-fetch/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/re-formality/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/re-classnames/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/re-css/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/reason-react/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/ocaml' -bin-annot -bs-no-builtin-ppx-ml -bs-package-name app-web -bs-package-output es6:node_modules/.lsp -ppx /Users/Alex/Dev/Projects/app/node_modules/graphql_ppx/ppx -ppx '/Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/reactjs_jsx_ppx_2.exe' -ppx /Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/bsppx.exe -nostdlib -open Belt -color always -w -30-40+6+7+27+32..39+44+45+101-44 -bs-re-out -impl /Users/Alex/Dev/Projects/app/web/node_modules/.lsp/SignupMutation.ast with pwd /Users/Alex/Dev/Projects/app/web
type error here File "_none_", line 1:
Error: Some record fields are undefined: createdAt
Sending notification {"jsonrpc": "2.0", "method": "textDocument/publishDiagnostics", "params": {"uri": "file:///Users/Alex/Dev/Projects/app/web/src/api/mutations/SignupMutation.re", "diagnostics": [{"range": {"start": {"line": 0, "character": 0}, "end": {"line": 0, "character": 0}}, "message": "File \"_none_\", line 1:\nError: Some record fields are undefined: createdAt", "severity": 1}]}}
Running diagnostics for file:///Users/Alex/Dev/Projects/app/web/src/ui/auth/SignupForm.re
running bsc /Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/bsc.exe -c -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/ui' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/ui/auth' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/ui/layout' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/locales' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/locales/extractor' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/locales/translations' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/shell' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/models' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/models/domain' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/libs' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/forms' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/forms/TextField' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/.ui' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/styles' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Svg' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Portal' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Spinner' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Headings' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Button' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Logo' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Icon' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Modal' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Control' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/icons' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/api' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/api/transport' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/api/mutations' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/api/queries' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/bindings' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/services' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/ocaml' -I '/Users/Alex/Dev/Projects/app/node_modules/@glennsl/bs-json/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-react-intl/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/core' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/file' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/canvas' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/ranges' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/css' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/nodes' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/html' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/sets' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/traversal' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/selection' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/geometry' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/events' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/validation' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-fetch/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/re-formality/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/re-classnames/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/re-css/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/reason-react/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/ocaml' -bin-annot -bs-no-builtin-ppx-ml -bs-package-name app-web -bs-package-output es6:node_modules/.lsp -ppx /Users/Alex/Dev/Projects/app/node_modules/graphql_ppx/ppx -ppx '/Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/reactjs_jsx_ppx_2.exe' -ppx /Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/bsppx.exe -nostdlib -open Belt -color always -w -30-40+6+7+27+32..39+44+45+101-44 -bs-re-out -impl /Users/Alex/Dev/Projects/app/web/node_modules/.lsp/SignupForm.ast with pwd /Users/Alex/Dev/Projects/app/web
Ident!! Formality.Async.Make
Ident!! SignupForm
<< Replacing lastDefinitions for file:///Users/Alex/Dev/Projects/app/web/src/ui/auth/SignupForm.re
Sending notification {"jsonrpc": "2.0", "method": "textDocument/publishDiagnostics", "params": {"uri": "file:///Users/Alex/Dev/Projects/app/web/src/ui/auth/SignupForm.re", "diagnostics": []}}
Running diagnostics for file:///Users/Alex/Dev/Projects/app/web/src/models/domain/User.re
running bsc /Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/bsc.exe -c -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/ui' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/ui/auth' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/ui/layout' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/locales' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/locales/extractor' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/locales/translations' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/shell' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/models' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/models/domain' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/libs' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/forms' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/forms/TextField' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/.ui' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/styles' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Svg' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Portal' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Spinner' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Headings' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Button' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Logo' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Icon' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Modal' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/components/Control' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/styleguide/icons' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/api' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/api/transport' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/api/mutations' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/api/queries' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/bindings' -I '/Users/Alex/Dev/Projects/app/web/lib/bs/src/services' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/ocaml' -I '/Users/Alex/Dev/Projects/app/node_modules/@glennsl/bs-json/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-react-intl/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/core' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/file' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/canvas' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/ranges' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/css' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/nodes' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/html' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/sets' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/traversal' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/selection' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/geometry' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/events' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-webapi/lib/bs/src/dom/validation' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-fetch/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/re-formality/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/re-classnames/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/re-css/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/reason-react/lib/bs/src' -I '/Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/ocaml' -bin-annot -bs-no-builtin-ppx-ml -bs-package-name app-web -bs-package-output es6:node_modules/.lsp -ppx /Users/Alex/Dev/Projects/app/node_modules/graphql_ppx/ppx -ppx '/Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/reactjs_jsx_ppx_2.exe' -ppx /Users/Alex/Dev/Projects/app/node_modules/bs-platform/lib/bsppx.exe -nostdlib -open Belt -color always -w -30-40+6+7+27+32..39+44+45+101-44 -bs-re-out -impl /Users/Alex/Dev/Projects/app/web/node_modules/.lsp/User.ast with pwd /Users/Alex/Dev/Projects/app/web
<< Replacing lastDefinitions for file:///Users/Alex/Dev/Projects/app/web/src/models/domain/User.re
Sending notification {"jsonrpc": "2.0", "method": "textDocument/publishDiagnostics", "params": {"uri": "file:///Users/Alex/Dev/Projects/app/web/src/models/domain/User.re", "diagnostics": []}}
```

Contributor guide

No contributing guide indexed for this repository

Research direction

Reproduce the failure by saving a Reason file that causes graphql_ppx to report the "Some record fields are undefined: createdAt" compile-time error, then trace the language server's diagnostic handling after the build-system output. Done means the language server reports the compile error without hanging or consuming 100% CPU.

Written by the indexing model from the issue text.

Assessment

Tech stack
ocaml
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.