diff --git a/CHANGELOG.md b/CHANGELOG.md index bdd5911..f6b9f21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ -## [unreleased] +## [6.11.2] (2023-01-14) + +### Feature +- add navigation support to imported files (#250) ### Fix - Intellij store variables independent from current env in global cache (Anweber/httpyac#612) diff --git a/package-lock.json b/package-lock.json index da1e766..1000fa2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "vscode-httpyac", - "version": "6.11.1", + "version": "6.11.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-httpyac", - "version": "6.11.1", + "version": "6.11.2", "license": "MIT", "dependencies": { "filesize": "^10.1.0", "httpsnippet": "^3.0.1", - "httpyac": "^6.11.0", + "httpyac": "^6.11.1", "lodash": "^4.17.21", "mime-types": "^2.1.35", "uuid": "^9.0.1" @@ -2915,9 +2915,9 @@ } }, "node_modules/httpyac": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/httpyac/-/httpyac-6.11.0.tgz", - "integrity": "sha512-A791WRNb+DQaWh4nfKy1xZtoSpQvc6GNZ7bPzn6b+5JgSzCKoYt9t2gqCWn5pumGLCigAt9K5efdHrDDARmnHg==", + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/httpyac/-/httpyac-6.11.1.tgz", + "integrity": "sha512-efHss+TWZ9OUkTurv/yWD3Gdf9AvXyo7nUUWaij1Z+CWXuRUlBkAFQKf3mXBJ/u4dPdZ6Wz2gbzCww86UBdbwQ==", "dependencies": { "@cloudamqp/amqp-client": "^2.1.1", "@grpc/grpc-js": "^1.9.9", diff --git a/package.json b/package.json index 8da2874..bfcf629 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "license": "MIT", "publisher": "anweber", "description": "Quickly and easily send REST, Soap, GraphQL, GRPC, MQTT, RabbitMQ and WebSocket requests directly within Visual Studio Code", - "version": "6.11.1", + "version": "6.11.2", "homepage": "https://github.com/AnWeber/vscode-httpyac", "repository": { "type": "git", @@ -1544,7 +1544,7 @@ "dependencies": { "filesize": "^10.1.0", "httpsnippet": "^3.0.1", - "httpyac": "^6.11.0", + "httpyac": "^6.11.1", "lodash": "^4.17.21", "mime-types": "^2.1.35", "uuid": "^9.0.1" diff --git a/src/provider/httpDefinitionProvider.ts b/src/provider/httpDefinitionProvider.ts index e341ed5..182cce0 100644 --- a/src/provider/httpDefinitionProvider.ts +++ b/src/provider/httpDefinitionProvider.ts @@ -2,52 +2,46 @@ import * as vscode from 'vscode'; import * as httpyac from 'httpyac'; import { DocumentStore } from '../documentStore'; -import * as path from 'path'; - - - export class HttpDefinitionProvider implements vscode.DefinitionProvider { - constructor(readonly documentStore: DocumentStore) { - } + constructor(readonly documentStore: DocumentStore) {} public async provideDefinition( document: vscode.TextDocument, position: vscode.Position ): Promise { - const result: Array = []; const httpFile = await this.documentStore.getHttpFile(document); - const workingDir = path.dirname(document.fileName); - const word = document.getText(document.getWordRangeAtPosition(position)); - const line = document.lineAt(position); - if(httpFile){ + if (httpFile) { for (const httpRegion of httpFile.httpRegions) { - // find if current position is with in requestBody - const requestBody = - httpRegion.symbol.children?.find(obj => - // this could be with new new SymbolKind.File - obj.kind === httpyac.HttpSymbolKind.requestBody && - obj.startLine === line.lineNumber + const pathSymbols = httpRegion.symbol + .getSymbolsForLine(position.line) + .filter( + symbol => + symbol.kind === httpyac.HttpSymbolKind.path && + symbol.startOffset <= position.character && + position.character <= symbol.endOffset + ); + + for (const pathSymbol of pathSymbols) { + const path = await httpyac.utils.toAbsoluteFilename( + pathSymbol.description, + httpyac.io.fileProvider.dirname(httpFile.fileName) ); - if(requestBody){ - // check if request body is link to file - const source = requestBody.source; - const reStr = `^<@?\\w*\\s+(.*?${word}.*?)\\s*$`; - const match = source?.match(reStr); - if (match) { - const potentialFname = match[1] || match[2]; - // resolve from relative path to absolute - const fullPath = path.resolve(workingDir, potentialFname); + if (path instanceof vscode.Uri) { result.push( - new vscode.Location(vscode.Uri.file(fullPath), new vscode.Position(0, 1)) + new vscode.Location( + path, + new vscode.Range( + new vscode.Position(pathSymbol.startLine, pathSymbol.startOffset), + new vscode.Position(pathSymbol.endLine, pathSymbol.endOffset) + ) + ) ); } - break; } } } - return Promise.resolve(result); + return result; } - } diff --git a/src/provider/httpDocumentSymbolProvider.ts b/src/provider/httpDocumentSymbolProvider.ts index 4a19433..6bc2014 100644 --- a/src/provider/httpDocumentSymbolProvider.ts +++ b/src/provider/httpDocumentSymbolProvider.ts @@ -83,6 +83,8 @@ export class HttpDocumentSymbolProvider implements vscode.DocumentSymbolProvider return vscode.SymbolKind.String; case HttpSymbolKind.response: return vscode.SymbolKind.Package; + case HttpSymbolKind.path: + return vscode.SymbolKind.File; default: return vscode.SymbolKind.Object; }