Skip to content

Commit d144665

Browse files
authored
Make ObjectScript comment tokens configurable (#1353)
1 parent bf5ede1 commit d144665

File tree

3 files changed

+51
-5
lines changed

3 files changed

+51
-5
lines changed

package.json

+19
Original file line numberDiff line numberDiff line change
@@ -1573,6 +1573,25 @@
15731573
"type": "boolean",
15741574
"default": true,
15751575
"scope": "resource"
1576+
},
1577+
"objectscript.commentToken": {
1578+
"description": "The line comment characters for ObjectScript in classes and MAC and INC routines.",
1579+
"type": "string",
1580+
"enum": ["#;","//",";"],
1581+
"enumDescriptions": [
1582+
"Comments do not appear in generated INT code.",
1583+
"Comments appear in generated INT code.",
1584+
"Comments appear in generated INT code."
1585+
],
1586+
"default": "#;",
1587+
"scope": "machine"
1588+
},
1589+
"objectscript.intCommentToken": {
1590+
"description": "The line comment characters for INT routines.",
1591+
"type": "string",
1592+
"enum": ["//",";"],
1593+
"default": "//",
1594+
"scope": "machine"
15761595
}
15771596
}
15781597
},

src/extension.ts

+25-4
Original file line numberDiff line numberDiff line change
@@ -540,9 +540,14 @@ function proposedApiPrompt(active: boolean, added?: readonly vscode.WorkspaceFol
540540
}
541541
}
542542

543-
// The URIs of all classes that have been opened. Used when objectscript.openClassContracted is true.
543+
/** The URIs of all classes that have been opened. Used when `objectscript.openClassContracted` is true */
544544
let openedClasses: string[];
545545

546+
// Disposables for language configurations that can be modifed by settings
547+
let macLangConf: vscode.Disposable;
548+
let incLangConf: vscode.Disposable;
549+
let intLangConf: vscode.Disposable;
550+
546551
export async function activate(context: vscode.ExtensionContext): Promise<any> {
547552
if (!packageJson.version.includes("SNAPSHOT")) {
548553
try {
@@ -737,6 +742,10 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
737742

738743
iscIcon = vscode.Uri.joinPath(context.extensionUri, "images", "fileIcon.svg");
739744

745+
macLangConf = vscode.languages.setLanguageConfiguration(macLangId, getLanguageConfiguration(macLangId));
746+
incLangConf = vscode.languages.setLanguageConfiguration(incLangId, getLanguageConfiguration(incLangId));
747+
intLangConf = vscode.languages.setLanguageConfiguration(intLangId, getLanguageConfiguration(intLangId));
748+
740749
context.subscriptions.push(
741750
reporter,
742751
panel,
@@ -971,9 +980,6 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
971980
isReadonly: true,
972981
}),
973982
vscode.languages.setLanguageConfiguration(clsLangId, getLanguageConfiguration(clsLangId)),
974-
vscode.languages.setLanguageConfiguration(macLangId, getLanguageConfiguration(macLangId)),
975-
vscode.languages.setLanguageConfiguration(incLangId, getLanguageConfiguration(incLangId)),
976-
vscode.languages.setLanguageConfiguration(intLangId, getLanguageConfiguration(intLangId)),
977983
vscode.languages.registerCodeActionsProvider(documentSelector(clsLangId, macLangId), new CodeActionProvider()),
978984
vscode.languages.registerWorkspaceSymbolProvider(new WorkspaceSymbolProvider()),
979985
vscode.debug.registerDebugConfigurationProvider("objectscript", new ObjectScriptConfigurationProvider()),
@@ -1149,6 +1155,18 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
11491155
vscode.commands.executeCommand("workbench.files.action.refreshFilesExplorer");
11501156
}
11511157
}
1158+
if (affectsConfiguration("objectscript.commentToken")) {
1159+
// Update the language configuration for "objectscript" and "objectscript-macros"
1160+
macLangConf?.dispose();
1161+
incLangConf?.dispose();
1162+
macLangConf = vscode.languages.setLanguageConfiguration(macLangId, getLanguageConfiguration(macLangId));
1163+
incLangConf = vscode.languages.setLanguageConfiguration(incLangId, getLanguageConfiguration(incLangId));
1164+
}
1165+
if (affectsConfiguration("objectscript.intCommentToken")) {
1166+
// Update the language configuration for "objectscript-int"
1167+
intLangConf?.dispose();
1168+
intLangConf = vscode.languages.setLanguageConfiguration(intLangId, getLanguageConfiguration(intLangId));
1169+
}
11521170
}),
11531171
vscode.window.onDidCloseTerminal((t) => {
11541172
const terminalIndex = terminals.findIndex((terminal) => terminal.name == t.name);
@@ -1382,4 +1400,7 @@ export function deactivate(): void {
13821400
if (terminals) {
13831401
terminals.forEach((t) => t.dispose());
13841402
}
1403+
macLangConf?.dispose();
1404+
incLangConf?.dispose();
1405+
intLangConf?.dispose();
13851406
}

src/languageConfiguration.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as vscode from "vscode";
22

33
export function getLanguageConfiguration(lang: string): vscode.LanguageConfiguration {
4+
const conf = vscode.workspace.getConfiguration("objectscript");
45
return {
56
wordPattern:
67
/((?<=(class|extends|as|of) )(%?\b[a-z0-9]+(\.[a-z0-9]+)*\b))|(\^[a-z0-9]+(\.[a-z0-9]+)*)|((\${1,3}|[irm]?%|\^|#)?[a-z0-9]+)/i,
@@ -9,7 +10,12 @@ export function getLanguageConfiguration(lang: string): vscode.LanguageConfigura
910
["(", ")"],
1011
],
1112
comments: {
12-
lineComment: ["objectscript-class", "objectscript-int"].includes(lang) ? "//" : "#;",
13+
lineComment:
14+
lang == "objectscript-class"
15+
? "//"
16+
: ["objectscript", "objectscript-macros"].includes(lang)
17+
? conf.get("commentToken")
18+
: conf.get("intCommentToken"),
1319
blockComment: ["/*", "*/"],
1420
},
1521
autoClosingPairs: [

0 commit comments

Comments
 (0)