diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-07-24 13:46:55 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2020-07-24 13:46:55 +0100 |
commit | c3defe2532ba6ffd12a13bcbc8fdeda037665efc (patch) | |
tree | 831bf4dd44ec83d927face4ba17e57dcdeab7fbe /editors | |
parent | 0e5095d3cac11d4b569c6e1594bd07937556c812 (diff) | |
parent | 58680cb08ea535e1fb567416fa3466a744a01b99 (diff) |
Merge #5518
5518: Use resolved paths in SSR rules r=matklad a=davidlattimore
The main user-visible changes are:
* SSR now matches paths based on whether they resolve to the same thing instead of whether they're written the same.
* So `foo()` won't match `foo()` if it's a different function `foo()`, but will match `bar::foo()` if it's the same `foo`.
* Paths in the replacement will now be rendered with appropriate qualification for their context.
* For example `foo::Bar` will render as just `Bar` inside the module `foo`, but might render as `baz::foo::Bar` from elsewhere.
* This means that all paths in the search pattern and replacement template must be able to be resolved.
* It now also matters where you invoke SSR from, since paths are resolved relative to wherever that is.
* Search now uses find-uses on paths to locate places to try matching. This means that when a path is present in the pattern, search will generally be pretty fast.
* Function calls can now match method calls again, but this time only if they resolve to the same function.
Co-authored-by: David Lattimore <[email protected]>
Diffstat (limited to 'editors')
-rw-r--r-- | editors/code/src/commands.ts | 14 | ||||
-rw-r--r-- | editors/code/src/lsp_ext.ts | 2 |
2 files changed, 13 insertions, 3 deletions
diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts index 1f3a7cf7e..c21e5597c 100644 --- a/editors/code/src/commands.ts +++ b/editors/code/src/commands.ts | |||
@@ -185,15 +185,21 @@ export function parentModule(ctx: Ctx): Cmd { | |||
185 | 185 | ||
186 | export function ssr(ctx: Ctx): Cmd { | 186 | export function ssr(ctx: Ctx): Cmd { |
187 | return async () => { | 187 | return async () => { |
188 | const editor = vscode.window.activeTextEditor; | ||
188 | const client = ctx.client; | 189 | const client = ctx.client; |
189 | if (!client) return; | 190 | if (!editor || !client) return; |
191 | |||
192 | const position = editor.selection.active; | ||
193 | const textDocument = { uri: editor.document.uri.toString() }; | ||
190 | 194 | ||
191 | const options: vscode.InputBoxOptions = { | 195 | const options: vscode.InputBoxOptions = { |
192 | value: "() ==>> ()", | 196 | value: "() ==>> ()", |
193 | prompt: "Enter request, for example 'Foo($a) ==> Foo::new($a)' ", | 197 | prompt: "Enter request, for example 'Foo($a) ==> Foo::new($a)' ", |
194 | validateInput: async (x: string) => { | 198 | validateInput: async (x: string) => { |
195 | try { | 199 | try { |
196 | await client.sendRequest(ra.ssr, { query: x, parseOnly: true }); | 200 | await client.sendRequest(ra.ssr, { |
201 | query: x, parseOnly: true, textDocument, position, | ||
202 | }); | ||
197 | } catch (e) { | 203 | } catch (e) { |
198 | return e.toString(); | 204 | return e.toString(); |
199 | } | 205 | } |
@@ -208,7 +214,9 @@ export function ssr(ctx: Ctx): Cmd { | |||
208 | title: "Structured search replace in progress...", | 214 | title: "Structured search replace in progress...", |
209 | cancellable: false, | 215 | cancellable: false, |
210 | }, async (_progress, _token) => { | 216 | }, async (_progress, _token) => { |
211 | const edit = await client.sendRequest(ra.ssr, { query: request, parseOnly: false }); | 217 | const edit = await client.sendRequest(ra.ssr, { |
218 | query: request, parseOnly: false, textDocument, position | ||
219 | }); | ||
212 | 220 | ||
213 | await vscode.workspace.applyEdit(client.protocol2CodeConverter.asWorkspaceEdit(edit)); | 221 | await vscode.workspace.applyEdit(client.protocol2CodeConverter.asWorkspaceEdit(edit)); |
214 | }); | 222 | }); |
diff --git a/editors/code/src/lsp_ext.ts b/editors/code/src/lsp_ext.ts index 5f32cb40e..149f9a0d6 100644 --- a/editors/code/src/lsp_ext.ts +++ b/editors/code/src/lsp_ext.ts | |||
@@ -93,6 +93,8 @@ export const inlayHints = new lc.RequestType<InlayHintsParams, InlayHint[], void | |||
93 | export interface SsrParams { | 93 | export interface SsrParams { |
94 | query: string; | 94 | query: string; |
95 | parseOnly: boolean; | 95 | parseOnly: boolean; |
96 | textDocument: lc.TextDocumentIdentifier; | ||
97 | position: lc.Position; | ||
96 | } | 98 | } |
97 | export const ssr = new lc.RequestType<SsrParams, lc.WorkspaceEdit, void>('experimental/ssr'); | 99 | export const ssr = new lc.RequestType<SsrParams, lc.WorkspaceEdit, void>('experimental/ssr'); |
98 | 100 | ||