Skip to content

Add GrepResultService and RegionContextProviderService implementations - #333727

Merged
Dirk Bäumer (dbaeumer) merged 18 commits into
mainfrom
dbaeumer/innovative-cicada-coral
Sep 1, 2026
Merged

Add GrepResultService and RegionContextProviderService implementations#333727
Dirk Bäumer (dbaeumer) merged 18 commits into
mainfrom
dbaeumer/innovative-cicada-coral

Conversation

@dbaeumer

Copy link
Copy Markdown
Member

Introduce the GrepResultService and its null implementation, along with the RegionContextProviderService and its null counterpart. These services enhance the functionality related to text searching and region context management. The implementation includes tests to verify the behavior of the GrepResultService.

Copilot AI balanced review requested due to automatic review settings September 1, 2026 07:55
@dbaeumer
Dirk Bäumer (dbaeumer) enabled auto-merge (squash) September 1, 2026 07:55

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

Review tier: Balanced
Findings: 10 Medium severity

New issues introduced by this change (10)
Severity Finding
Medium severity extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​regionContextProvider.ts — Only the initial provider is registered in disposables. After updateProvider() replaces it,…
Medium severity extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​ts7/​regionContextProvider.ts — This rejects typescriptreact and javascriptreact. The new debug command is explicitly enabled…
Medium severity extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​ts6/​regionContextProvider.ts — The TS6 provider also rejects the React language IDs, even though the command handler supports them…
Medium severity extensions/​copilot/​src/​extension/​tools/​node/​readFileTool.tsx — This gate bypasses the new grep/region correlation for every .tsx and .jsx read, despite the…
Medium severity extensions/​copilot/​package.json — The registered handler accepts JavaScript and JavaScript React editors…
Medium severity extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​ts7/​regionContextProvider.ts — The optional requested range is silently ignored whenever there is exactly one match. In…
Medium severity extensions/​copilot/​src/​extension/​typescriptContext/​serverPlugin/​src/​common/​regionContextProvider.ts — The server-plugin implementation also drops requested for a single range, so TS6 behaves…
Medium severity extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​ts7/​regionContextProvider.ts — For an object-literal property such as handler: () => {}, this adds a function region for the…
Medium severity extensions/​copilot/​src/​extension/​tools/​node/​grepResultService.tsTextSearchMatch2.ranges may contain multiple source matches, but initial cache population keeps…
Medium severity extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​ts7/​regionContextProvider.ts — When requested covers the whole parent, assigning continueWith: parent.parent makes the for
What changed in this PR

Adds grep-result caching and TypeScript structural-region discovery, wiring both into read-file telemetry and diagnostics.

Changes:

  • Adds request-scoped grep-result storage.
  • Implements TS6/TS7 region providers and protocol support.
  • Registers services, diagnostics, and tests.
File Description
extensions/​copilot/​src/​platform/​test/​node/​services.ts Registers null test services.
extensions/​copilot/​src/​platform/​languageContextProvider/​common/​regionContextProvider.ts Defines region service contracts.
extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​ts7/​test/​regionContext.spec.ts Tests TS7 regions.
extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​ts7/​regionContextProvider.ts Implements native TS7 regions.
extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​ts6/​tsContextService.ts Provides relocated TS6 context service.
extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​ts6/​regionContextProvider.ts Bridges TS6 region requests.
extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​ts6/​nesRenameService.ts Provides relocated TS6 rename service.
extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​regionContextProvider.ts Switches active region provider.
extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​nesRenameService.ts Updates TS6 import path.
extensions/​copilot/​src/​extension/​typescriptContext/​vscode-node/​languageContextService.ts Adds region logging command.
extensions/​copilot/​src/​extension/​typescriptContext/​serverPlugin/​src/​node/​test/​regionContext.spec.ts Tests server-plugin regions.
extensions/​copilot/​src/​extension/​typescriptContext/​serverPlugin/​src/​node/​create.ts Registers region protocol handler.
extensions/​copilot/​src/​extension/​typescriptContext/​serverPlugin/​src/​common/​regionContextProvider.ts Implements TS6 AST regions.
extensions/​copilot/​src/​extension/​typescriptContext/​serverPlugin/​src/​common/​protocol.ts Adds server region protocol types.
extensions/​copilot/​src/​extension/​typescriptContext/​common/​serverProtocol.ts Adds client region protocol types.
extensions/​copilot/​src/​extension/​tools/​node/​test/​grepResultService.spec.ts Tests grep-result lookup.
extensions/​copilot/​src/​extension/​tools/​node/​test/​findTextInFilesTool.spec.tsx Normalizes file ending.
extensions/​copilot/​src/​extension/​tools/​node/​test/​findTextInFilesResult.spec.tsx Adds URIs to fixtures.
extensions/​copilot/​src/​extension/​tools/​node/​readFileTool.tsx Correlates reads with grep regions.
extensions/​copilot/​src/​extension/​tools/​node/​grepResultService.ts Implements grep-result cache.
extensions/​copilot/​src/​extension/​tools/​node/​findTextInFilesTool.tsx Records grouped grep results.
extensions/​copilot/​src/​extension/​extension/​vscode-node/​services.ts Registers production services.
extensions/​copilot/​package.nls.json Localizes the debug command.
extensions/​copilot/​package.json Contributes the debug command.
Suppressed comments (4)

extensions/copilot/src/extension/typescriptContext/serverPlugin/src/common/regionContextProvider.ts:153

  • Object-literal arrow properties are emitted twice here as well: once by this arrow-function case and again when the loop reaches the same PropertyAssignment. Mark the parent as already represented with continueWith.
			case ts.SyntaxKind.ArrowFunction:
				if (ts.isPropertyAssignment(parent) && ts.isIdentifier(parent.name)) {
					name = parent.name.text;
					return { kind: 'function', name, rangeNode: parent };

extensions/copilot/src/extension/tools/node/readFileTool.tsx:196

  • This records readFileRegionAdjusted, whose schema says these are the lines after adjustment, but ranges is never changed and the original bounds are still rendered at line 230. The telemetry therefore reports a clipping that did not occur. Either apply the computed region before rendering or rename the event/schema to explicitly describe a hypothetical candidate.
						if (regions !== undefined && regions.length > 0 && documentSnapshot.version === documentSnapshot.document.version) {
							this.sendAdjustedRegionTelemetry(options, startLine, endLine, regions[0].range.start, regions[0].range.end);

extensions/copilot/src/extension/typescriptContext/serverPlugin/src/common/regionContextProvider.ts:222

  • This has the same extra parent skip in the TS6/server implementation: after assigning current = parent.parent, the loop increment advances past it, which drops the enclosing source-file region for a fully requested top-level parent. Continue with parent instead.
					continueWith: parent.parent

extensions/copilot/src/extension/tools/node/grepResultService.ts:66

  • Incremental cache updates also inspect only ranges[0], so additional ranges carried by each search match are lost even after the initial insertion path is fixed. Iterate every range before applying the existing per-line deduplication.
					matches.files.set(file.uri.toString(), file.matches.map(m => m.ranges[0].sourceRange));

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread extensions/copilot/src/extension/tools/node/readFileTool.tsx
Comment thread extensions/copilot/package.json Outdated
Comment thread extensions/copilot/src/extension/tools/node/grepResultService.ts
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@dbaeumer
Dirk Bäumer (dbaeumer) merged commit e6094c9 into main Sep 1, 2026
41 checks passed
@dbaeumer
Dirk Bäumer (dbaeumer) deleted the dbaeumer/innovative-cicada-coral branch September 1, 2026 10:14
@vs-code-engineering vs-code-engineering Bot added this to the 1.137.0 milestone Sep 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants