Compare commits

...

2 commits
v1.2.2 ... main

Author SHA1 Message Date
7a9581fc54 🚧Move to local versions 2025-04-10 13:20:56 +02:00
1e1888c733
♻️ Move over to implementations 2025-04-08 09:08:22 +02:00
5 changed files with 39 additions and 47 deletions

View file

@ -10,7 +10,11 @@ jobs:
lint: lint:
runs-on: docker runs-on: docker
steps: steps:
- uses: actions/checkout@v4 - uses: https://source.mapcomplete.org/actions/checkout@v4
- name: Set up Node.js
uses: https://source.mapcomplete.org/actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies - name: Install dependencies
run: npm install run: npm install
- name: Lint - name: Lint

View file

@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## Version 1.2.3 (2025-04-XX)
### Fixed
- Instead of using implementations the extension now correctly used references.
## Version 1.2.2 (2025-03-01) ## Version 1.2.2 (2025-03-01)
This is the last release of the extension on GitHub, from now on you'll be able to find the source code on the [MapComplete Forgejo](https://source.mapcomplete.org/Robin-van-der-Linde/MapCompleteVScode). Releases will still be available on the VScode Marketplace and Open VSX as well. This is the last release of the extension on GitHub, from now on you'll be able to find the source code on the [MapComplete Forgejo](https://source.mapcomplete.org/Robin-van-der-Linde/MapCompleteVScode). Releases will still be available on the VScode Marketplace and Open VSX as well.

View file

@ -56,6 +56,6 @@ It's also possible to install builds for any commit in any branch by checking ou
## Usage ## Usage
Most of the features should be pretty self-explanatory. As for the implementation support, the 'anchor' for this is the id property of the layer, tagRendering or filter. This means that if you want to see where a layer is used, you should be able to see all uses by using `CTRL+F12` on the id property of the layer, or by right-clicking on the id property and selecting "Go to Implementations". Most of the features should be pretty self-explanatory. As for references support, the 'anchor' for this is the id property of the layer, tagRendering or filter. This means that if you want to see where a layer is used, you should be able to see all uses by using `SHIFT+F12` on the id property of the layer, or by right-clicking on the id property and selecting "Go to References".
![Demo showing implementation support for tagRenderings](images/implementation.gif) ![Demo showing implementation support for tagRenderings](images/implementation.gif)

View file

@ -4,11 +4,11 @@ import { colorProvider, iconDefinitionProvider } from "./generic";
import { import {
filterCompletionProvider, filterCompletionProvider,
filterDefinitionProvider, filterDefinitionProvider,
filterImplementationProvider, filterReferenceProvider,
layerImplementationProvider, layerReferenceProvider,
tagRenderingCompletionProvider, tagRenderingCompletionProvider,
tagRenderingDefinitionProvider, tagRenderingDefinitionProvider,
tagRenderingImplementationProvider, tagRenderingReferenceProvider,
} from "./layers"; } from "./layers";
import { pathDefinitionProvider } from "./license_info"; import { pathDefinitionProvider } from "./license_info";
import { CacheWorker } from "./utils/cache"; import { CacheWorker } from "./utils/cache";
@ -44,9 +44,9 @@ export async function activate(context: vscode.ExtensionContext) {
tagRenderingDefinitionProvider, tagRenderingDefinitionProvider,
filterCompletionProvider, filterCompletionProvider,
filterDefinitionProvider, filterDefinitionProvider,
tagRenderingImplementationProvider, tagRenderingReferenceProvider,
filterImplementationProvider, filterReferenceProvider,
layerImplementationProvider layerReferenceProvider
); );
// Activate all license info related features // Activate all license info related features

View file

@ -173,20 +173,20 @@ export const tagRenderingDefinitionProvider =
} }
); );
export const tagRenderingImplementationProvider = export const tagRenderingReferenceProvider =
vscode.languages.registerImplementationProvider( vscode.languages.registerReferenceProvider(
{ {
language: "json", language: "json",
scheme: "file", scheme: "file",
pattern: "**/assets/*/*/*.json", pattern: "**/assets/*/*/*.json",
}, },
{ {
async provideImplementation( async provideReferences(
document: vscode.TextDocument, document: vscode.TextDocument,
position: vscode.Position position: vscode.Position
) { ) {
if (vscode.workspace.getConfiguration("mapcomplete").get("caching")) { if (vscode.workspace.getConfiguration("mapcomplete").get("caching")) {
console.log("tagRenderingImplementationProvider"); console.log("tagRenderingReferenceProvider");
const text = document.getText(); const text = document.getText();
const jsonPath = getCursorPath(text, position); const jsonPath = getCursorPath(text, position);
const rawJsonPath = getRawCursorPath(text, position); const rawJsonPath = getRawCursorPath(text, position);
@ -207,7 +207,7 @@ export const tagRenderingImplementationProvider =
} else { } else {
console.log(`Found ${references.length} references to ${to}`); console.log(`Found ${references.length} references to ${to}`);
const links: vscode.DefinitionLink[] = []; const links: vscode.Location[] = [];
for (const reference of references) { for (const reference of references) {
console.log( console.log(
`Pushing link from ${document.fileName} to ${reference.reference?.from.uri?.fsPath} at ${reference.reference?.to.range?.[0]?.line}:${reference.reference?.to.range?.[0]?.character}`, `Pushing link from ${document.fileName} to ${reference.reference?.from.uri?.fsPath} at ${reference.reference?.to.range?.[0]?.line}:${reference.reference?.to.range?.[0]?.character}`,
@ -217,19 +217,13 @@ export const tagRenderingImplementationProvider =
// Check if we have a targetUri // Check if we have a targetUri
if (reference.reference?.from.uri) { if (reference.reference?.from.uri) {
links.push({ links.push({
originSelectionRange: new vscode.Range( range: new vscode.Range(
reference.reference?.to?.range?.[0]?.line ?? 0,
reference.reference?.to?.range?.[0]?.character ?? 0,
reference.reference?.to?.range?.[1]?.line ?? 0,
reference.reference?.to?.range?.[1]?.character ?? 0
),
targetRange: new vscode.Range(
reference.reference?.from?.range?.[0]?.line ?? 0, reference.reference?.from?.range?.[0]?.line ?? 0,
reference.reference?.from?.range?.[0]?.character ?? 0, reference.reference?.from?.range?.[0]?.character ?? 0,
reference.reference?.from?.range?.[1]?.line ?? 0, reference.reference?.from?.range?.[1]?.line ?? 0,
reference.reference?.from?.range?.[1]?.character ?? 0 reference.reference?.from?.range?.[1]?.character ?? 0
), ),
targetUri: reference.reference?.from?.uri, uri: reference.reference?.from?.uri,
}); });
} else { } else {
console.error("Incomplete reference", reference); console.error("Incomplete reference", reference);
@ -407,20 +401,20 @@ export const filterDefinitionProvider =
} }
); );
export const filterImplementationProvider = export const filterReferenceProvider =
vscode.languages.registerImplementationProvider( vscode.languages.registerReferenceProvider(
{ {
language: "json", language: "json",
scheme: "file", scheme: "file",
pattern: "**/assets/*/*/*.json", pattern: "**/assets/*/*/*.json",
}, },
{ {
async provideImplementation( async provideReferences(
document: vscode.TextDocument, document: vscode.TextDocument,
position: vscode.Position position: vscode.Position
) { ) {
if (vscode.workspace.getConfiguration("mapcomplete").get("caching")) { if (vscode.workspace.getConfiguration("mapcomplete").get("caching")) {
console.log("filterImplementationProvider"); console.log("filterReferenceProvider");
const text = document.getText(); const text = document.getText();
const jsonPath = getCursorPath(text, position); const jsonPath = getCursorPath(text, position);
const rawJsonPath = getRawCursorPath(text, position); const rawJsonPath = getRawCursorPath(text, position);
@ -442,7 +436,7 @@ export const filterImplementationProvider =
} else { } else {
console.log(`Found ${references.length} references to ${to}`); console.log(`Found ${references.length} references to ${to}`);
const links: vscode.DefinitionLink[] = []; const links: vscode.Location[] = [];
for (const reference of references) { for (const reference of references) {
console.log( console.log(
`Pushing link from ${document.fileName} to ${reference.reference?.from.uri?.fsPath} at ${reference.reference?.to.range?.[0]?.line}:${reference.reference?.to.range?.[0]?.character}`, `Pushing link from ${document.fileName} to ${reference.reference?.from.uri?.fsPath} at ${reference.reference?.to.range?.[0]?.line}:${reference.reference?.to.range?.[0]?.character}`,
@ -452,19 +446,13 @@ export const filterImplementationProvider =
// Check if we have a targetUri // Check if we have a targetUri
if (reference.reference?.from.uri) { if (reference.reference?.from.uri) {
links.push({ links.push({
originSelectionRange: new vscode.Range( range: new vscode.Range(
reference.reference?.to?.range?.[0]?.line ?? 0,
reference.reference?.to?.range?.[0]?.character ?? 0,
reference.reference?.to?.range?.[1]?.line ?? 0,
reference.reference?.to?.range?.[1]?.character ?? 0
),
targetRange: new vscode.Range(
reference.reference?.from?.range?.[0]?.line ?? 0, reference.reference?.from?.range?.[0]?.line ?? 0,
reference.reference?.from?.range?.[0]?.character ?? 0, reference.reference?.from?.range?.[0]?.character ?? 0,
reference.reference?.from?.range?.[1]?.line ?? 0, reference.reference?.from?.range?.[1]?.line ?? 0,
reference.reference?.from?.range?.[1]?.character ?? 0 reference.reference?.from?.range?.[1]?.character ?? 0
), ),
targetUri: reference.reference?.from?.uri, uri: reference.reference?.from?.uri,
}); });
} else { } else {
console.error("Incomplete reference", reference); console.error("Incomplete reference", reference);
@ -484,20 +472,20 @@ export const filterImplementationProvider =
} }
); );
export const layerImplementationProvider = export const layerReferenceProvider =
vscode.languages.registerImplementationProvider( vscode.languages.registerReferenceProvider(
{ {
language: "json", language: "json",
scheme: "file", scheme: "file",
pattern: "**/assets/layers/*/*.json", pattern: "**/assets/layers/*/*.json",
}, },
{ {
async provideImplementation( async provideReferences(
document: vscode.TextDocument, document: vscode.TextDocument,
position: vscode.Position position: vscode.Position
) { ) {
if (vscode.workspace.getConfiguration("mapcomplete").get("caching")) { if (vscode.workspace.getConfiguration("mapcomplete").get("caching")) {
console.log("layerImplementationProvider"); console.log("layerReferenceProvider");
const text = document.getText(); const text = document.getText();
const jsonPath = getCursorPath(text, position); const jsonPath = getCursorPath(text, position);
const rawJsonPath = getRawCursorPath(text, position); const rawJsonPath = getRawCursorPath(text, position);
@ -519,7 +507,7 @@ export const layerImplementationProvider =
} else { } else {
console.log(`Found ${references.length} references to ${to}`); console.log(`Found ${references.length} references to ${to}`);
const links: vscode.DefinitionLink[] = []; const links: vscode.Location[] = [];
for (const reference of references) { for (const reference of references) {
console.log( console.log(
`Pushing link from ${document.fileName} to ${reference.reference?.from.uri?.fsPath} at ${reference.reference?.to.range?.[0]?.line}:${reference.reference?.to.range?.[0]?.character}`, `Pushing link from ${document.fileName} to ${reference.reference?.from.uri?.fsPath} at ${reference.reference?.to.range?.[0]?.line}:${reference.reference?.to.range?.[0]?.character}`,
@ -529,19 +517,13 @@ export const layerImplementationProvider =
// Check if we have a targetUri // Check if we have a targetUri
if (reference.reference?.from.uri) { if (reference.reference?.from.uri) {
links.push({ links.push({
originSelectionRange: new vscode.Range( range: new vscode.Range(
reference.reference?.to?.range?.[0]?.line ?? 0,
reference.reference?.to?.range?.[0]?.character ?? 0,
reference.reference?.to?.range?.[1]?.line ?? 0,
reference.reference?.to?.range?.[1]?.character ?? 0
),
targetRange: new vscode.Range(
reference.reference?.from?.range?.[0]?.line ?? 0, reference.reference?.from?.range?.[0]?.line ?? 0,
reference.reference?.from?.range?.[0]?.character ?? 0, reference.reference?.from?.range?.[0]?.character ?? 0,
reference.reference?.from?.range?.[1]?.line ?? 0, reference.reference?.from?.range?.[1]?.line ?? 0,
reference.reference?.from?.range?.[1]?.character ?? 0 reference.reference?.from?.range?.[1]?.character ?? 0
), ),
targetUri: reference.reference?.from?.uri, uri: reference.reference?.from?.uri,
}); });
} else { } else {
console.error("Incomplete reference", reference); console.error("Incomplete reference", reference);