Skip to content

Commit

Permalink
Merge pull request #126 from mghdotdev/feature/fragment-document-linking
Browse files Browse the repository at this point in the history
Feature/fragment document linking
  • Loading branch information
mghdotdev authored Sep 20, 2024
2 parents 896d171 + 09d6af2 commit 62e59d1
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 17 deletions.
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
# Miva IDE CHANGELOG

## v1.24.0 (latest)
## v1.25.0 (latest)

* Added document linking for `<mvt:fragment />` tags.

## v1.24.0

* Added `<mvt:fragment />` tag snippet and syntax support.
* Added Miva Merchant 10.10.00 LSK data.
Expand Down
13 changes: 7 additions & 6 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "vscode-miva-ide",
"displayName": "Miva IDE",
"description": "Syntax highlighting, snippets and tools for building websites with Miva.",
"version": "1.24.0",
"version": "1.25.0",
"engines": {
"vscode": "^1.77.0",
"node": ">=16"
Expand Down
22 changes: 17 additions & 5 deletions server/src/miva-features.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ import {
ActivationProviders,
LanguageFeatures,
MivaScriptFunction,
MivaTemplateLanguageParsedFragment,
MivaTemplateLanguageParsedItem,
MvLanguageModel,
MvtLanguageModel,
Expand Down Expand Up @@ -191,6 +192,7 @@ export function activateFeatures({workspaceSymbolProvider, mivaScriptCompilerPro
const parseMvtDocument = ( document: TextDocument ) => {
const symbols: SymbolInformationWithDocumentation[] = [];
const parsedItems: MivaTemplateLanguageParsedItem[] = [];
const parsedFragments: MivaTemplateLanguageParsedFragment[] = [];

const scanner = htmlLanguageService.createScanner( document.getText(), 0 );
let token = scanner.scan();
Expand Down Expand Up @@ -282,6 +284,14 @@ export function activateFeatures({workspaceSymbolProvider, mivaScriptCompilerPro
});
}
}
else if ( lastTagName === 'mvt:fragment' ) {
if (lastAttributeName === 'code') {
parsedFragments.push({
code: attributeValue,
range: range
});
}
}
break;

case TokenType.StartTagSelfClose:
Expand All @@ -304,7 +314,8 @@ export function activateFeatures({workspaceSymbolProvider, mivaScriptCompilerPro

return {
symbols,
parsedItems
parsedItems,
parsedFragments
};
};

Expand All @@ -326,12 +337,13 @@ export function activateFeatures({workspaceSymbolProvider, mivaScriptCompilerPro
};

const mvtDocuments = getLanguageModelCache<MvtLanguageModel>( 10, 60, (document: TextDocument) => {
const {symbols, parsedItems} = parseMvtDocument( document );
const {symbols, parsedItems, parsedFragments} = parseMvtDocument( document );

return {
symbols,
document,
parsedItems
parsedItems,
parsedFragments
};
});

Expand Down Expand Up @@ -865,9 +877,9 @@ export function activateFeatures({workspaceSymbolProvider, mivaScriptCompilerPro
return [];
}

const {parsedItems} = mvtDocuments.get( document );
const {parsedItems, parsedFragments} = mvtDocuments.get( document );

const links = (await mivaManagedTemplatesProvider.provideLinks(parsedItems, document)) ?? [];
const links = (await mivaManagedTemplatesProvider.provideLinks(parsedItems, parsedFragments, document)) ?? [];

return links;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { TextDocument } from 'vscode-languageserver-textdocument';
import { URI, Utils } from 'vscode-uri';
import { uriToFsPath } from '../../util/functions';
import { fileIsInFolder, walk } from '../../util/functions-node';
import { MivaTemplateLanguageParsedItem, Workspace } from '../../util/interfaces';
import { MivaTemplateLanguageParsedFragment, MivaTemplateLanguageParsedItem, Workspace } from '../../util/interfaces';

export class MivaMangedTemplatesProvider {
private mmtPaths: Set<string> = new Set();
Expand Down Expand Up @@ -43,7 +43,7 @@ export class MivaMangedTemplatesProvider {
return relativePath?.split(new RegExp(sep, 'g'));
}

async provideLinks (parsedItems: MivaTemplateLanguageParsedItem[], document: TextDocument): Promise<DocumentLink[]> {
async provideLinks (parsedItems: MivaTemplateLanguageParsedItem[], parsedFragments: MivaTemplateLanguageParsedFragment[], document: TextDocument): Promise<DocumentLink[]> {
const documentPath = uriToFsPath(document.uri);
const mmtPath = this.getPath(documentPath);
if (!mmtPath) {
Expand Down Expand Up @@ -269,7 +269,19 @@ export class MivaMangedTemplatesProvider {
break;
}
}
}
}

for (let parsedFragment of parsedFragments) {
const codeLower = parsedFragment.code.toLowerCase();

const relativePath = `./templates/${codeLower}.mvt`;
const target = this.getTargetFromRelativePath(relativePath, mmtPath);

links.push({
range: parsedFragment.range,
target
});
}

return links;
}
Expand Down
8 changes: 7 additions & 1 deletion server/src/util/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ export interface MvtLanguageModel {
symbols: SymbolInformationWithDocumentation[];
document: TextDocument;
parsedItems: MivaTemplateLanguageParsedItem[];
parsedFragments: MivaTemplateLanguageParsedFragment[];
}


Expand Down Expand Up @@ -283,4 +284,9 @@ export interface MivaTemplateLanguageParsedItem {
param?: string;
expression?: MivaExpression;
range?: Range;
};
};

export interface MivaTemplateLanguageParsedFragment {
code: string;
range: Range;
}

0 comments on commit 62e59d1

Please sign in to comment.