Skip to content

Commit

Permalink
Merge pull request #129 from mghdotdev/feature/global-vars
Browse files Browse the repository at this point in the history
Feature/global vars
  • Loading branch information
mghdotdev authored Dec 9, 2024
2 parents 2f790e8 + d898da6 commit 00fdfaf
Show file tree
Hide file tree
Showing 6 changed files with 164 additions and 14 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.27.0 (latest)
## 1.28.0 (latest)

* Added global variable autocompletion.

## v1.27.0

* Added tag mismatch validation for mvt tags.

Expand Down
8 changes: 5 additions & 3 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.27.0",
"version": "1.28.0",
"engines": {
"vscode": "^1.77.0",
"node": ">=16"
Expand Down
33 changes: 24 additions & 9 deletions server/src/miva-features.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import {
import { URI, Utils } from 'vscode-uri';
import builtinFunctionData from './data/functions-builtin.json';
import merchantFunctionFiles from './data/functions-merchant.json';
import globalVariableData from './mv/global-variables';
import mvOperatorData from './mv/operators';
import systemVariableData from './mv/system-variables';
import { mvSnippetData, mvTagData } from './mv/tags';
Expand Down Expand Up @@ -92,6 +93,7 @@ export function activateFeatures({workspaceSymbolProvider, mivaScriptCompilerPro
const builtinFunctionCompletions: CompletionList = CompletionList.create( parseCompletionFile( builtinFunctionData ) );
const builtinFunctionHoverMap: Map<string, MarkupContent> = getHoverMapFromCompletionFile( builtinFunctionData, false );
const systemVariableCompletions: CompletionList = CompletionList.create( parseCompletionFile( Object.values( systemVariableData ) ) );
const globalVariableCompletions: CompletionList = CompletionList.create( parseCompletionFile( Object.values( globalVariableData ) ) );
const operatorCompletions: CompletionList = CompletionList.create( parseCompletionFile( Object.values( mvOperatorData ) ) );

// Document cache for Miva Script (this is globally defined since we use .mv documents in MVT for LSK lookups)
Expand Down Expand Up @@ -140,15 +142,18 @@ export function activateFeatures({workspaceSymbolProvider, mivaScriptCompilerPro
?.map(_variable => _variable.replace(foundVariableRegex, ''));

return CompletionList.create(
foundVariables.map((variable) => {
return parseCompletion({
"label": variable,
"kind": "Variable",
"detail": variable,
"documentation": "",
"commitCharacters": []
});
})
[
...globalVariableCompletions.items,
...foundVariables.map((variable) => {
return parseCompletion({
"label": variable,
"kind": "Variable",
"detail": variable,
"documentation": "",
"commitCharacters": []
});
})
]
);

}
Expand Down Expand Up @@ -748,6 +753,16 @@ export function activateFeatures({workspaceSymbolProvider, mivaScriptCompilerPro
}
}

// System variable hover
if (patterns.SHARED.LEFT_VARIABLE_G.test(left)) {
const foundGlobalVariable = globalVariableData[wordLower];
if (foundGlobalVariable) {
return {
contents: foundGlobalVariable.documentation
};
}
}

// Tag name hover
if (patterns.MVT.LEFT_IN_MVT_TAG.test(left)) {
// Determine which tag we are in
Expand Down
119 changes: 119 additions & 0 deletions server/src/mv/global-variables.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
import { CompletionItemKind } from 'vscode-languageserver';
import { BaseGlobalVariableData, GlobalVariableData } from '../util/interfaces';

const baseGlobalVariableData: BaseGlobalVariableData = {
kind: CompletionItemKind.Variable
};

const globalVariableData: Record<string, GlobalVariableData> = {
action: {
...baseGlobalVariableData,
label: 'Action',
detail: 'Action',
documentation: ``
},
order_id: {
...baseGlobalVariableData,
label: 'Order_ID',
detail: 'Order ID',
documentation: ``
},
store_code: {
...baseGlobalVariableData,
label: 'Store_Code',
detail: 'Store Code',
documentation: ``
},
product_code: {
...baseGlobalVariableData,
label: 'Product_Code',
detail: 'Product Code',
documentation: ``
},
category_code: {
...baseGlobalVariableData,
label: 'Category_Code',
detail: 'Category Code',
documentation: ``
},
page_code: {
...baseGlobalVariableData,
label: 'Page_Code',
detail: 'Page Code',
documentation: ``
},
error_code: {
...baseGlobalVariableData,
label: 'Error_Code',
detail: 'Error Code',
documentation: ``
},
error_message: {
...baseGlobalVariableData,
label: 'Error_Message',
detail: 'Error Message',
documentation: ``
},
mvdo_error: {
...baseGlobalVariableData,
label: 'MvDO_Error',
detail: 'MvDO Error Message',
documentation: `Error message from the last ran \`<mvt:do>\` tag.`
},
mvcall_error: {
...baseGlobalVariableData,
label: 'MvCALL_Error',
detail: 'MvCALL Error Message',
documentation: `Error message from the last ran \`<mvt:call>\` tag.`
},
screen: {
...baseGlobalVariableData,
label: 'Screen',
detail: 'Screen',
documentation: ``
},
session_type: {
...baseGlobalVariableData,
label: 'Session_Type',
detail: 'Session Type',
documentation: ``
},
session_id: {
...baseGlobalVariableData,
label: 'Session_ID',
detail: 'Session ID',
documentation: ``
},
merchant_local_timezone: {
...baseGlobalVariableData,
label: 'Merchant_Local_Timezone',
detail: 'Merchant Local Timezone',
documentation: `Timezone of the server.`
},
module_root_versionless: {
...baseGlobalVariableData,
label: 'Module_Root_Versionless',
detail: 'Module Root Versionless',
documentation: `Example: \`/mm5/\``
},
module_root: {
...baseGlobalVariableData,
label: 'Module_Root',
detail: 'Module Root',
documentation: `Example: \`/mm5/5.00/\``
},
customer_session_id: {
...baseGlobalVariableData,
label: 'Customer_Session_ID',
detail: 'Customer Session ID',
documentation: ``
},
customer_session_verified: {
...baseGlobalVariableData,
label: 'Customer_Session_Verified',
detail: 'Customer Session Verified',
documentation: ``
}
};

export default globalVariableData;
10 changes: 10 additions & 0 deletions server/src/util/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,16 @@ export interface SystemVariableData extends BaseSystemVariableData {
documentation: string;
}

export interface BaseGlobalVariableData {
kind: CompletionItemKind;
}

export interface GlobalVariableData extends BaseGlobalVariableData {
label: string;
detail: string;
documentation: string;
}

export interface SymbolInformationWithDocumentation extends SymbolInformation {
documentation?: MarkupContent;
};
Expand Down

0 comments on commit 00fdfaf

Please sign in to comment.