diff --git a/src/Paths/TextFilePath.ts b/src/Paths/TextFilePath.ts index 85c22065f..b59a6e6da 100644 --- a/src/Paths/TextFilePath.ts +++ b/src/Paths/TextFilePath.ts @@ -7,7 +7,7 @@ export type TextFilePath = FilePath & WithTextExtension; /** Check extension only */ export function hasTextExtension(path: string): path is WithTextExtension { - return path.endsWith(".txt"); + return path.endsWith(".txt") || path.endsWith(".json"); } /** Sanitize a player input, resolve any relative paths, and for imports add the correct extension if missing */ diff --git a/src/ScriptEditor/ScriptEditor.ts b/src/ScriptEditor/ScriptEditor.ts index eb753480e..14430675f 100644 --- a/src/ScriptEditor/ScriptEditor.ts +++ b/src/ScriptEditor/ScriptEditor.ts @@ -60,6 +60,12 @@ export class ScriptEditor { const source = (libSource + "").replace(/export /g, ""); monaco.languages.typescript.javascriptDefaults.addExtraLib(source, "netscript.d.ts"); monaco.languages.typescript.typescriptDefaults.addExtraLib(source, "netscript.d.ts"); + monaco.languages.json.jsonDefaults.setModeConfiguration({ + ...monaco.languages.json.jsonDefaults.modeConfiguration, + //completion should be disabled because the + //json language server tries to load a schema by default + completionItems: false, + }); // Load themes loadThemes(monaco.editor.defineTheme); sanitizeTheme(Settings.EditorTheme); diff --git a/src/ScriptEditor/ui/OpenScript.ts b/src/ScriptEditor/ui/OpenScript.ts index 249ccd3cb..df4164ff1 100644 --- a/src/ScriptEditor/ui/OpenScript.ts +++ b/src/ScriptEditor/ui/OpenScript.ts @@ -1,6 +1,7 @@ import type { ContentFilePath } from "../../Paths/ContentFile"; import { editor, Position } from "monaco-editor"; import { makeModel } from "./utils"; +import { hasTextExtension } from "../../Paths/TextFilePath"; type ITextModel = editor.ITextModel; @@ -21,7 +22,7 @@ export class OpenScript { this.hostname = hostname; this.lastPosition = lastPosition; this.model = model; - this.isTxt = path.endsWith(".txt"); + this.isTxt = hasTextExtension(path); } regenerateModel(): void { diff --git a/src/ScriptEditor/ui/utils.ts b/src/ScriptEditor/ui/utils.ts index 9d05c5044..3610c1307 100644 --- a/src/ScriptEditor/ui/utils.ts +++ b/src/ScriptEditor/ui/utils.ts @@ -26,7 +26,7 @@ function makeModel(hostname: string, filename: string, code: string) { scheme: "file", path: `${hostname}/${filename}`, }); - const language = filename.endsWith(".txt") ? "plaintext" : "javascript"; + const language = filename.endsWith(".txt") ? "plaintext" : filename.endsWith(".json") ? "json" : "javascript"; //if somehow a model already exist return it return editor.getModel(uri) ?? editor.createModel(code, language, uri); } diff --git a/webpack.config.js b/webpack.config.js index e70fdd197..4c8e2ab08 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -94,7 +94,7 @@ module.exports = (env, argv) => { return { plugins: [ - new MonacoWebpackPlugin({ languages: ["javascript", "typescript"] }), + new MonacoWebpackPlugin({ languages: ["javascript", "typescript", "json"] }), new webpack.DefinePlugin({ "process.env.NODE_ENV": isDevelopment ? '"development"' : '"production"', }),