This PR significantly improves the test coverage of the language server, providing at least a single basic test for every request that is used by the client. It also implements infrastructure for testing all of these requests, e.g. the ability to run interactive tests in a project context and refactors the interactive test runner to be more maintainable. Finally, it also fixes a small bug with the recently implemented unknown identifier code actions for auto-implicits (#10442) that was discovered in testing, where the "import all unambiguous unknown identifiers" code action didn't work correctly on auto-implicit identifiers.
51 lines
2.5 KiB
Text
51 lines
2.5 KiB
Text
{"widgets":
|
|
[{"range":
|
|
{"start": {"line": 12, "character": 0},
|
|
"end": {"line": 12, "character": 19}},
|
|
"props": {},
|
|
"javascriptHash": "2874772427606622741",
|
|
"id": "helloWidget"}]}
|
|
{"pos": {"line": 12, "character": 4}, "hash": "2874772427606622741"}
|
|
{"sourcetext":
|
|
"\n import * as React from 'react';\n export default function(props) {\n const name = props.name || 'world'\n return React.createElement('p', {}, name + '!')\n }"}
|
|
{"widgets":
|
|
[{"range":
|
|
{"start": {"line": 19, "character": 0},
|
|
"end": {"line": 19, "character": 63}},
|
|
"props": {"name": "lean"},
|
|
"javascriptHash": "2874772427606622741",
|
|
"id": "helloWidget"}]}
|
|
{"pos": {"line": 19, "character": 4}, "hash": "2874772427606622741"}
|
|
{"sourcetext":
|
|
"\n import * as React from 'react';\n export default function(props) {\n const name = props.name || 'world'\n return React.createElement('p', {}, name + '!')\n }"}
|
|
{"widgets":
|
|
[{"range": null,
|
|
"props": {"name": "local"},
|
|
"javascriptHash": "2874772427606622741",
|
|
"id": "helloWidget"},
|
|
{"range": null,
|
|
"props": {"name": "global"},
|
|
"javascriptHash": "2874772427606622741",
|
|
"id": "helloWidget"}]}
|
|
{"pos": {"line": 25, "character": 2}, "hash": "2874772427606622741"}
|
|
{"sourcetext":
|
|
"\n import * as React from 'react';\n export default function(props) {\n const name = props.name || 'world'\n return React.createElement('p', {}, name + '!')\n }"}
|
|
{"pos": {"line": 25, "character": 2}, "hash": "2874772427606622741"}
|
|
{"sourcetext":
|
|
"\n import * as React from 'react';\n export default function(props) {\n const name = props.name || 'world'\n return React.createElement('p', {}, name + '!')\n }"}
|
|
{"widgets":
|
|
[{"range": null,
|
|
"props": {"name": "scoped"},
|
|
"javascriptHash": "2874772427606622741",
|
|
"id": "helloWidget"},
|
|
{"range": null,
|
|
"props": {"name": "global"},
|
|
"javascriptHash": "2874772427606622741",
|
|
"id": "helloWidget"}]}
|
|
{"pos": {"line": 33, "character": 2}, "hash": "2874772427606622741"}
|
|
{"sourcetext":
|
|
"\n import * as React from 'react';\n export default function(props) {\n const name = props.name || 'world'\n return React.createElement('p', {}, name + '!')\n }"}
|
|
{"pos": {"line": 33, "character": 2}, "hash": "2874772427606622741"}
|
|
{"sourcetext":
|
|
"\n import * as React from 'react';\n export default function(props) {\n const name = props.name || 'world'\n return React.createElement('p', {}, name + '!')\n }"}
|
|
{"widgets": []}
|