diff --git a/README.md b/README.md index ee29fd6..5fdfea6 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ This extension adds language support for the Nim language to VS Code, including: * Quick info * Problem Matchers for nim compiler and test output * Nim check result reported in `Nim` output channel (great for macro development) - ![output channel demo](images/nim_vscode_output_demo.gif "Demo of macro evaluation in the output channel") + ![output channel demo](https://github.com/nim-lang/vscode-nim/raw/HEAD/images/nim_vscode_output_demo.gif "Demo of macro evaluation in the output channel") ## Using @@ -130,7 +130,7 @@ Then, you need to create a launch configuration in the project's launch.json fil You should be set up now to be able to debug from a given file in the native VS Code(ium) debugger. -![Debugger preview screenshot](images/debugging-screenshot.png "debugger preview") +![Debugger preview screenshot](https://github.com/nim-lang/vscode-nim/raw/HEAD/images/debugging-screenshot.png "debugger preview") --- diff --git a/package.json b/package.json index e4a14b3..78e8e8c 100644 --- a/package.json +++ b/package.json @@ -1,467 +1,491 @@ { - "name": "nimlang", - "displayName": "nim-lang.org", - "description": "Nim extension maintained by the Nim compiler team.", - "version": "1.4.1", - "publisher": "NimLang", - "author": { - "name": "NimLang" - }, - "license": "MIT", - "icon": "images/nim_icon.png", - "homepage": "https://github.com/saem/vscode-nim/blob/main/README.md", - "categories": [ - "Programming Languages", - "Linters" - ], - "galleryBanner": { - "color": "#2C2A35", - "theme": "dark" - }, - "repository": { - "type": "git", - "url": "https://github.com/nim-lang/vscode-nim/" - }, - "bugs": { - "url": "https://github.com/nim-lang/vscode-nim/issues" - }, - "scripts": { - "vscode:prepublish": "nimble release" - }, - "dependencies": { - "vscode-languageclient": "^9.0.1" - }, - "devDependencies": { - "@types/mocha": "^5.2.7", - "@types/node": "^10.17.17", - "@types/vscode": "^1.27.0", - "@vscode/vsce": "^2.21.1", - "js-yaml": "^4.1.0", - "npm-check-updates": "^16.10.15", - "ovsx": "^0.8.3", - "typescript": "^2.6.1", - "vscode-test": "^1.4.0" - }, - "engines": { - "vscode": "^1.27.0" - }, - "activationEvents": [ - "onLanguage:nim", - "onLanguage:nimcfg", - "onLanguage:nimble", - "onCommand:nim.build", - "onCommand:nim.run", - "onCommand:nim.runTest", - "onCommand:nim.execSelectionInTerminal" - ], - "main": "./out/nimvscode.js", - "contributes": { - "languages": [ - { - "id": "nim", - "aliases": [ - "Nim", - "nim" - ], - "extensions": [ - ".nim", - ".nims", - "nim.cfg", - ".nim.cfg", - ".nimble" - ], - "configuration": "./nimcfg.json" - }, - { - "id": "nimble", - "aliases": [ - "Nimble", - "nimble" - ], - "extensions": [ - ".nimble" - ], - "configuration": "./nimcfg.json" - } - ], - "grammars": [ - { - "language": "nim", - "scopeName": "source.nim", - "path": "./syntaxes/nim.json" - }, - { - "language": "nimble", - "scopeName": "source.nim", - "path": "./syntaxes/nim.json" - } - ], - "problemMatchers": [ - { - "name": "nim", - "owner": "nim", - "fileLocation": "absolute", - "severity": "error", - "pattern": { - "regexp": "(?!^(\\.+|Hint|\\s+$))(>+ )?(.*)\\((\\d+),\\s(\\d+)\\)\\s+((Error|Warning|Hint):\\s(.*)|(template/generic instantiation from here.*))(\\s\\[.*\\])?", - "file": 3, - "line": 4, - "column": 5, - "severity": 7, - "message": 8 - } - }, - { - "name": "nim test", - "owner": "nim", - "fileLocation": "absolute", - "pattern": [ - { - "regexp": " \\[(OK|FAILED|SKIPPED)\\] (.*)", - "severity": 1, - "code": 2 - }, - { - "regexp": " (.*)\\((\\d+), (\\d+)\\): (.*)", - "file": 1, - "line": 2, - "column": 3, - "message": 4, - "loop": true - } - ] - } - ], - "viewsContainers": { - "activitybar": [ - { - "id": "nim", - "title": "Nim", - "icon": "images/nim_icon.png" - } - ] - }, - "views": { - "nim": [ - { - "id": "nim", - "name": "Nim" - } - ] - }, - "commands": [ - { - "command": "nim.run.file", - "title": "Run selected Nim file", - "category": "Nim", - "icon": "$(run)" - }, - { - "command": "nim.debug.file", - "title": "Debug selected Nim file", - "category": "Nim", - "icon": "$(debug-alt)" - - }, - { - "command": "nim.check", - "title": "Check Nim project", - "category": "Nim" - }, - { - "command": "nim.execSelectionInTerminal", - "title": "Run Selection/Line in Nim Terminal", - "category": "Nim" - }, - { - "command": "nim.clearCaches", - "title": "Clear internal caches", - "category": "Nim" - }, - { - "command": "nim.listCandidateProjects", - "title": "List candidate nim projects", - "category": "Nim" - }, - { - "command": "nim.restartNimsuggest", - "title": "Restarts nimsuggest", - "category": "Nim" - } - ], - "menus": { - "editor/context": [ - { - "when": "editorLangId == 'nim'", - "command": "nim.run.file", - "group": "run@1" - }, - { - "when": "editorLangId == 'nim'", - "command": "nim.debug.file", - "group": "run@2" - } - ], - "editor/title/run": [ - { - "command": "nim.run.file", - "when": "editorLangId == 'nim'", - "group": "run@1" - }, - { - "command": "nim.debug.file", - "when": "editorLangId == 'nim'", - "group": "run@2" - } - ] - }, - "keybindings": [ - { - "key": "F6", - "command": "nim.run.file", - "when": "editorLangId == 'nim'" - }, - { - "key": "shift+F5", - "command": "nim.debug.file", - "when": "editorLangId == 'nim'" - }, - { - "key": "ctrl+alt+b", - "command": "nim.check", - "when": "editorLangId == 'nim'" - }, - { - "key": "shift+enter", - "command": "nim.execSelectionInTerminal", - "when": "editorFocus && editorLangId == nim && !findInputFocussed && !replaceInputFocussed" - } - ], - "configuration": { - "type": "object", - "title": "Nim configuration", - "properties": { - "nim.project": { - "type": "array", - "default": [], - "description": "Nim project file, if empty use current selected.", - "scope": "resource" - }, - "nim.projectMapping": { - "type": "array", - "default": [], - "description": "For non project mode list of per file project mapping using regex, for example ```{\"fileRegex\": \"(.*).inim\", \"projectFile\": \"$1.nim\"}```", - "properties": { - "fileRegex": { - "type": "string", - "description": "Source file regex" - }, - "projectFile": { - "type": "string", - "description": "Project file path" - } - }, - "scope": "resource" - }, - "nim.test-project": { - "type": "string", - "default": "", - "description": "Optional test project.", - "scope": "resource" - }, - "nim.buildOnSave": { - "type": "boolean", - "default": false, - "description": "Execute build task from tasks.json file on save.", - "scope": "resource" - }, - "nim.buildCommand": { - "type": "string", - "default": "c", - "description": "Nim build command (c, cpp, doc, etc)", - "scope": "resource" - }, - "nim.runOutputDirectory": { - "type": "string", - "default": "", - "description": "Output directory for run selected file command. The directory is relative to the workspace root.", - "scope": "resource" - }, - "nim.lintOnSave": { - "type": "boolean", - "default": false, - "description": "Check code by using 'nim check' on save.", - "scope": "resource", - "deprecationMessage": "Deprecated: Please use the Nim language server backend instead." - }, - "nim.enableNimsuggest": { - "type": "boolean", - "default": false, - "description": "Enable calling nimsuggest process to provide completion suggestions, hover suggestions, etc.\nThis option requires restart to take effect.", - "scope": "resource", - "deprecationMessage": "Deprecated: Please use the Nim language server backend instead." - }, - "nim.provider": { - "type": "string", - "default": "lsp", - "description": "The backend to use for language features.", - "enum": [ - "nimsuggest", - "lsp", - "none" - ], - "scope": "resource", - "deprecationMessage": "Deprecated: Please use the lsp backend." - }, - "nim.useNimsuggestCheck": { - "type": "boolean", - "default": false, - "description": "Use nimsuggest in order to run check, instead of the nim compiler.", - "scope": "resource", - "deprecationMessage": "Deprecated: Please use the Nim language server backend instead." - }, - "nim.logNimsuggest": { - "type": "boolean", - "default": false, - "description": "Enable verbose logging of nimsuggest to use profile directory." - }, - "nim.licenseString": { - "type": "string", - "default": "", - "description": "Optional license text that will be inserted on nim file creation.", - "scope": "resource" - }, - "nim.nimsuggestRestartTimeout": { - "type": "integer", - "default": 60, - "description": "Nimsuggest will be restarted after this timeout in minutes, if 0 then restart disabled.\nThis option requires restart to take effect." - }, - "nim.nimprettyIndent": { - "type": "integer", - "default": 0, - "description": "Nimpretty: set the number of spaces that is used for indentation\n--indent:0 means autodetection (default behaviour).", - "scope": "resource" - }, - "nim.nimprettyMaxLineLen": { - "type": "integer", - "default": 80, - "description": "Nimpretty: set the desired maximum line length (default: 80).", - "scope": "resource" - }, - "nimlangserver.trace.server": { - "scope": "window", - "type": "string", - "enum": [ - "off", - "messages", - "verbose" - ], - "default": "off", - "description": "Traces the communication between VS Code and the Nim language server." - }, - "nim.lsp.path":{ - "type": "string", - "default": "", - "description": "Path to the Nim language server executable. If empty, the extension will try to find the language server in the PATH environment variable.", - "scope": "resource" - }, - "nim.inlayHints.typeHints.enable": { - "type": "boolean", - "default": true, - "description": "Enable inlay type hints." - }, - "nim.inlayHints.parameterHints.enable": { - "type": "boolean", - "default": true, - "description": "Enable inlay parameter hints." - }, - "nim.inlayHints.exceptionHints.enable": { - "type": "boolean", - "default": true, - "description": "Enable inlay hints for exceptions." - }, - "nim.inlayHints.exceptionHints.hintStringLeft": { - "type": "string", - "default": "🔔", - "description": "The string to use for exception hints. This string is displayed to the left of the symbol name." - }, - "nim.inlayHints.exceptionHints.hintStringRight": { - "type": "string", - "default": "", - "description": "The string to use for exception hints. This string is displayed to the right of the symbol name." - }, - "nim.debug.type": { - "type": "string", - "default": "lldb", - "description": "The type of debugger to use when using Nim: Debug selected file. The value is the same value as typically used in launch.json for the type attribute." - }, - "nim.notificationVerbosity": { - "type": "string", - "default": "info", - "enum": [ - "none", - "error", - "warning", - "info" - ], - "description": "The verbosity of the Nim language server notifications." - }, - "nim.notificationTimeout": { - "type": "integer", - "default": 15, - "description": "The timeout in seconds for the Nim language server notifications. Use 0 to disable the timeout." - }, - "nim.transportMode":{ - "type": "string", - "default": "stdio", - "enum": [ - "stdio", - "socket" - ], - "description": "The transport mode the lsp client will use." - }, - "nim.lspPort":{ - "type": "number", - "default": 0, - "description": "Useful for debugging. The port in which the lsp client will connect to when transport is socket. 0 implies the extension will start the socket server." - }, - "nim.formatOnSave":{ - "type": "boolean", - "default": false, - "description": "Format the file on save. Lsp backend only. Requires nph for formatting." - }, - "nim.useNimCheck":{ - "type": "boolean", - "default": false, - "description": "Use nim check instead of nimsuggest for linting. Controls lsp backend behavior." - }, - "nim.nimExpandArc":{ - "type": "boolean", - "default": false, - "description": "Expand ARC on proc definition hover." - }, - "nim.nimExpandMacro":{ - "type": "boolean", - "default": false, - "description": "Expand macro calls on hover." - }, - "nim.nimbleAutoSetup":{ - "type": "boolean", - "default": true, - "description": "Automatically run nimble setup when a .nimble file is detected in the current directory." - } - } - }, - "breakpoints": [ - { - "language": "nim" - } - ], - "snippets": [ - { - "language": "nim", - "path": "./snippets/nim.json" - } - ] - } -} + "name": "nimlang", + "displayName": "nim-lang.org", + "description": "Nim extension maintained by the Nim compiler team.", + "version": "1.4.1", + "publisher": "NimLang", + "author": { + "name": "NimLang" + }, + "license": "MIT", + "icon": "images/nim_icon.png", + "homepage": "https://github.com/saem/vscode-nim/blob/main/README.md", + "categories": [ + "Programming Languages", + "Linters" + ], + "galleryBanner": { + "color": "#2C2A35", + "theme": "dark" + }, + "repository": { + "type": "git", + "url": "https://github.com/nim-lang/vscode-nim/" + }, + "bugs": { + "url": "https://github.com/nim-lang/vscode-nim/issues" + }, + "scripts": { + "vscode:prepublish": "nimble release" + }, + "dependencies": { + "vscode-languageclient": "^9.0.1" + }, + "devDependencies": { + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.17", + "@types/vscode": "^1.27.0", + "@vscode/vsce": "^2.21.1", + "js-yaml": "^4.1.0", + "npm-check-updates": "^16.10.15", + "ovsx": "^0.8.3", + "typescript": "^2.6.1", + "vscode-test": "^1.4.0" + }, + "engines": { + "vscode": "^1.27.0" + }, + "activationEvents": [ + "onLanguage:nim", + "onLanguage:nimcfg", + "onLanguage:nimble", + "onCommand:nim.build", + "onCommand:nim.run", + "onCommand:nim.runTest", + "onCommand:nim.execSelectionInTerminal" + ], + "main": "./out/nimvscode.js", + "contributes": { + "languages": [ + { + "id": "nim", + "aliases": [ + "Nim", + "nim" + ], + "extensions": [ + ".nim", + ".nims", + "nim.cfg", + ".nim.cfg", + ".nimble" + ], + "configuration": "./nimcfg.json" + }, + { + "id": "nimble", + "aliases": [ + "Nimble", + "nimble" + ], + "extensions": [ + ".nimble" + ], + "configuration": "./nimcfg.json" + } + ], + "grammars": [ + { + "language": "nim", + "scopeName": "source.nim", + "path": "./syntaxes/nim.json" + }, + { + "language": "nimble", + "scopeName": "source.nim", + "path": "./syntaxes/nim.json" + } + ], + "problemMatchers": [ + { + "name": "nim", + "owner": "nim", + "fileLocation": "absolute", + "severity": "error", + "pattern": { + "regexp": "(?!^(\\.+|Hint|\\s+$))(>+ )?(.*)\\((\\d+),\\s(\\d+)\\)\\s+((Error|Warning|Hint):\\s(.*)|(template/generic instantiation from here.*))(\\s\\[.*\\])?", + "file": 3, + "line": 4, + "column": 5, + "severity": 7, + "message": 8 + } + }, + { + "name": "nim test", + "owner": "nim", + "fileLocation": "absolute", + "pattern": [ + { + "regexp": " \\[(OK|FAILED|SKIPPED)\\] (.*)", + "severity": 1, + "code": 2 + }, + { + "regexp": " (.*)\\((\\d+), (\\d+)\\): (.*)", + "file": 1, + "line": 2, + "column": 3, + "message": 4, + "loop": true + } + ] + } + ], + "viewsContainers": { + "activitybar": [ + { + "id": "nim", + "title": "Nim", + "icon": "images/nim_icon.png" + } + ] + }, + "views": { + "nim": [ + { + "id": "nim", + "name": "Nim" + } + ] + }, + "commands": [ + { + "command": "nim.run.file", + "title": "Run selected Nim file", + "category": "Nim", + "icon": "$(run)" + }, + { + "command": "nim.debug.file", + "title": "Debug selected Nim file", + "category": "Nim", + "icon": "$(debug-alt)" + }, + { + "command": "nim.check", + "title": "Check Nim project", + "category": "Nim" + }, + { + "command": "nim.execSelectionInTerminal", + "title": "Run Selection/Line in Nim Terminal", + "category": "Nim" + }, + { + "command": "nim.clearCaches", + "title": "Clear internal caches", + "category": "Nim" + }, + { + "command": "nim.listCandidateProjects", + "title": "List candidate nim projects", + "category": "Nim" + }, + { + "command": "nim.restartNimsuggest", + "title": "Restarts nimsuggest", + "category": "Nim" + }, + { + "command": "nim.showNimLangServerStatus", + "title": "Show Nim Language Server Status" + } + ], + "menus": { + "editor/context": [ + { + "when": "editorLangId == 'nim'", + "command": "nim.run.file", + "group": "run@1" + }, + { + "when": "editorLangId == 'nim'", + "command": "nim.debug.file", + "group": "run@2" + } + ], + "editor/title/run": [ + { + "command": "nim.run.file", + "when": "editorLangId == 'nim'", + "group": "run@1" + }, + { + "command": "nim.debug.file", + "when": "editorLangId == 'nim'", + "group": "run@2" + } + ] + }, + "keybindings": [ + { + "key": "F6", + "command": "nim.run.file", + "when": "editorLangId == 'nim'" + }, + { + "key": "shift+F5", + "command": "nim.debug.file", + "when": "editorLangId == 'nim'" + }, + { + "key": "ctrl+alt+b", + "command": "nim.check", + "when": "editorLangId == 'nim'" + }, + { + "key": "shift+enter", + "command": "nim.execSelectionInTerminal", + "when": "editorFocus && editorLangId == nim && !findInputFocussed && !replaceInputFocussed" + } + ], + "configuration": { + "type": "object", + "title": "Nim configuration", + "properties": { + "nim.project": { + "type": "array", + "default": [], + "description": "Nim project file, if empty use current selected.", + "scope": "resource" + }, + "nim.projectMapping": { + "type": "array", + "default": [], + "description": "For non project mode list of per file project mapping using regex, for example ```{\"fileRegex\": \"(.*).inim\", \"projectFile\": \"$1.nim\"}```", + "properties": { + "fileRegex": { + "type": "string", + "description": "Source file regex" + }, + "projectFile": { + "type": "string", + "description": "Project file path" + } + }, + "scope": "resource" + }, + "nim.test-project": { + "type": "string", + "default": "", + "description": "Optional test project.", + "scope": "resource" + }, + "nim.buildOnSave": { + "type": "boolean", + "default": false, + "description": "Execute build task from tasks.json file on save.", + "scope": "resource" + }, + "nim.buildCommand": { + "type": "string", + "default": "c", + "description": "Nim build command (c, cpp, doc, etc)", + "scope": "resource" + }, + "nim.runOutputDirectory": { + "type": "string", + "default": "", + "description": "Output directory for run selected file command. The directory is relative to the workspace root.", + "scope": "resource" + }, + "nim.lintOnSave": { + "type": "boolean", + "default": false, + "description": "Check code by using 'nim check' on save.", + "scope": "resource", + "deprecationMessage": "Deprecated: Please use the Nim language server backend instead." + }, + "nim.enableNimsuggest": { + "type": "boolean", + "default": false, + "description": "Enable calling nimsuggest process to provide completion suggestions, hover suggestions, etc.\nThis option requires restart to take effect.", + "scope": "resource", + "deprecationMessage": "Deprecated: Please use the Nim language server backend instead." + }, + "nim.provider": { + "type": "string", + "default": "lsp", + "description": "The backend to use for language features.", + "enum": [ + "nimsuggest", + "lsp", + "none" + ], + "scope": "resource", + "deprecationMessage": "Deprecated: Please use the lsp backend." + }, + "nim.useNimsuggestCheck": { + "type": "boolean", + "default": false, + "description": "Use nimsuggest in order to run check, instead of the nim compiler.", + "scope": "resource", + "deprecationMessage": "Deprecated: Please use the Nim language server backend instead." + }, + "nim.logNimsuggest": { + "type": "boolean", + "default": false, + "description": "Enable verbose logging of nimsuggest to use profile directory." + }, + "nim.licenseString": { + "type": "string", + "default": "", + "description": "Optional license text that will be inserted on nim file creation.", + "scope": "resource" + }, + "nim.nimsuggestRestartTimeout": { + "type": "integer", + "default": 60, + "description": "Nimsuggest will be restarted after this timeout in minutes, if 0 then restart disabled.\nThis option requires restart to take effect." + }, + "nim.nimprettyIndent": { + "type": "integer", + "default": 0, + "description": "Nimpretty: set the number of spaces that is used for indentation\n--indent:0 means autodetection (default behaviour).", + "scope": "resource" + }, + "nim.nimprettyMaxLineLen": { + "type": "integer", + "default": 80, + "description": "Nimpretty: set the desired maximum line length (default: 80).", + "scope": "resource" + }, + "nimlangserver.trace.server": { + "scope": "window", + "type": "string", + "enum": [ + "off", + "messages", + "verbose" + ], + "default": "off", + "description": "Traces the communication between VS Code and the Nim language server." + }, + "nim.lsp.path": { + "type": "string", + "default": "", + "description": "Path to the Nim language server executable. If empty, the extension will try to find the language server in the PATH environment variable.", + "scope": "resource" + }, + "nim.inlayHints.typeHints.enable": { + "type": "boolean", + "default": true, + "description": "Enable inlay type hints." + }, + "nim.inlayHints.parameterHints.enable": { + "type": "boolean", + "default": true, + "description": "Enable inlay parameter hints." + }, + "nim.inlayHints.exceptionHints.enable": { + "type": "boolean", + "default": true, + "description": "Enable inlay hints for exceptions." + }, + "nim.inlayHints.exceptionHints.hintStringLeft": { + "type": "string", + "default": "🔔", + "description": "The string to use for exception hints. This string is displayed to the left of the symbol name." + }, + "nim.inlayHints.exceptionHints.hintStringRight": { + "type": "string", + "default": "", + "description": "The string to use for exception hints. This string is displayed to the right of the symbol name." + }, + "nim.debug.type": { + "type": "string", + "default": "lldb", + "description": "The type of debugger to use when using Nim: Debug selected file. The value is the same value as typically used in launch.json for the type attribute." + }, + "nim.notificationVerbosity": { + "type": "string", + "default": "info", + "enum": [ + "none", + "error", + "warning", + "info" + ], + "description": "The verbosity of the Nim language server notifications." + }, + "nim.notificationTimeout": { + "type": "integer", + "default": 15, + "description": "The timeout in seconds for the Nim language server notifications. Use 0 to disable the timeout." + }, + "nim.transportMode": { + "type": "string", + "default": "stdio", + "enum": [ + "stdio", + "socket" + ], + "description": "The transport mode the lsp client will use." + }, + "nim.lspPort": { + "type": "number", + "default": 0, + "description": "Useful for debugging. The port in which the lsp client will connect to when transport is socket. 0 implies the extension will start the socket server." + }, + "nim.formatOnSave": { + "type": "boolean", + "default": false, + "description": "Format the file on save. Lsp backend only. Requires nph for formatting." + }, + "nim.useNimCheck": { + "type": "boolean", + "default": false, + "description": "Use nim check instead of nimsuggest for linting. Controls lsp backend behavior." + }, + "nim.nimExpandArc": { + "type": "boolean", + "default": false, + "description": "Expand ARC on proc definition hover." + }, + "nim.nimExpandMacro": { + "type": "boolean", + "default": false, + "description": "Expand macro calls on hover." + }, + "nim.nimbleAutoSetup": { + "type": "boolean", + "default": true, + "description": "Automatically run nimble setup when a .nimble file is detected in the current directory." + } + } + }, + "breakpoints": [ + { + "language": "nim" + } + ], + "snippets": [ + { + "language": "nim", + "path": "./snippets/nim.json" + } + ], + "themes": [ + { + "label": "Nim: Dark Verdure", + "uiTheme": "vs-dark", + "path": "./themes/Dark Verdure.json" + } + ] + }, + "__metadata": { + "id": "11cd9e22-9edc-411a-937c-9546d1c5b4b5", + "publisherId": "d480c41d-6e68-49b8-839c-3aa79ae53260", + "publisherDisplayName": "NimLang", + "targetPlatform": "undefined", + "isApplicationScoped": false, + "isPreReleaseVersion": false, + "hasPreReleaseVersion": false, + "installedTimestamp": 1738260332434, + "pinned": false, + "preRelease": false, + "source": "gallery", + "size": 11448948 + } +} \ No newline at end of file diff --git a/themes/Dark Verdure 2025.json b/themes/Dark Verdure 2025.json new file mode 100644 index 0000000..651652a --- /dev/null +++ b/themes/Dark Verdure 2025.json @@ -0,0 +1,475 @@ +{ + "name": "Nim: Dark Verdure", + "type": "dark", + "author": "AMS, based on the work of Dan Sullivan and Nimda", + "tokenColors": [ + + { + "name": "Comment", + "scope": "comment.block", + "settings": { + "foreground": "#00AF5F" + } + }, + { + "name": "Comment", + "scope": "comment", + "settings": { + "foreground": "#00AF5F" + } + }, + { + "name": "Comment, definition of", + "scope": "punctuation.definition.comment.nim", + "settings": { + "foreground": "#00AF5F" + } + }, + + + { + "name": "String", + "scope": "string", + "settings": { + "foreground": "#FFFFFF" + } + }, + { + "name": "String - begin", + "scope": "punctuation.definition.string.begin.nim", + "settings": { + "foreground": "#FFFFFF" + } + }, + { + "name": "String - end", + "scope": "punctuation.definition.string.end.nim", + "settings": { + "foreground": "#FFFFFF" + } + }, + { + "name": "Numeric constant", + "scope": "constant.numeric", + "settings": { + "foreground": "#FFFFFF" + } + }, + + // These four items in particular would benefit from a review by an experienced Nim coder. + { + "name": "A nim procedure or method (1)", + "scope": "keyword.other", + "settings": { + "foreground": "#00BFFF" + } + }, + { + "name": "A nim procedure", + "scope": "entity.name.function.nim", + "settings": { + "foreground": "#BFFF0F" + } + }, + { + "name": "A nim procedure or method (2) - catchall", + "scope": "entity.name", + "settings": { + "foreground": "#FFDFFF" + } + }, + { + "name": "A nim procedure or method (3)", + "scope": "keyword.control.export", + "settings": { + "foreground": "#FFDFFF" + } + }, + + { + "name": "Export qualifier following a type def.", + "scope": "support.type.nim", + "settings": { + "foreground": "#00BFFF" + } + }, + { + "name": "Language constants", + "scope": "constant.language.nim", + "settings": { + "foreground": "#DFFFDF" + } + }, + { + "name": "Keywords that affect program control flow or scope", + "scope": "keyword.control.nim", + "settings": { + "foreground": "#00BFFF" + } + }, + { + "name": "Keyword boolean operators for expressions", + "scope": "keyword.boolean.nim", + "settings": { + "foreground": "#EFEF8F" + } + }, + { + "name": "Generic operators for expressions", + "scope": "keyword.operator.nim", + "settings": { + "foreground": "#EFEF8F" + } + }, + { + "name": "Other keywords", + "scope": "keyword.other.nim", + "settings": { + "foreground": "#6FFFFF" + } + }, + { + "name": "Invalid and unused keywords", + "scope": "invalid.illegal.invalid-keyword.nim", + "settings": { + "foreground": "#FF0000" + } + }, + { + "name": "Common functions", + "scope": "keyword.other.common.function.nim", + "settings": { + "foreground": "#BFFF0F" + } + }, + { + "name": "Built-in, concrete types", + "scope": "storage.type.concrete.nim", + "settings": { + "foreground": "#7FCFBF" + } + }, + { + "name": "Built-in, generic types", + "scope": "storage.type.generic.nim", + "settings": { + "foreground": "#7FCFBF" + } + }, + { + "name": "Special types", + "scope": "storage.type.generic.nim", + "settings": { + "foreground": "#7FCFBF" + } + }, + { + "name": "Other constants", + "scope": "support.constant.nim", + "settings": { + "foreground": "#AFFFFF" + } + }, + { + "name": "Other types", + "scope": "support.type.nim", + "settings": { + "foreground": "#7FCFBF" + } + }, + { + "name": "Function call", + "scope": "support.function.any-method.nim", + "settings": { + "foreground": "#BFFF0F" + } + }, + { + // Note: When colored brackets are active, '{' and'}' are colorized. + "name": "Pragmas - punctuation and definition", + "scope": "punctuation.pragma", + "settings": { + "foreground": "#C0C0C0" + } + }, + { + "name": "Pragmas - name", + "scope": "meta.preprocessor.pragma.nim", + "settings": { + "foreground": "#C0C0C0" + } + }, + { + "name": "Punctuation - other", + "scope": "punctuation", + "settings": { + "foreground": "#DFDF9F" + } + }, + { + "name": "Keywords - other", + "scope": "keyword", + "settings": { + "foreground": "#AFFFFF" + } + }, + { + "name": "Preprocessor directive", + "scope": "meta.preprocessor", + "settings": { + "foreground": "#FFEFCF" + } + }, + { + "name": "meta - other", + "scope": "meta", + "settings": { + "foreground": "#AFFFFF" + } + }, + ], + "colors": { + "focusBorder": "#080808", + "errorForeground": "#F3002B", + + "button.foreground": "#FFFFFF", + "button.background": "#00A4F3", + "button.hoverBackground": "#0093DA", + + "dropdown.border": "#50504F", + + "input.border": "#50504F", + "inputOption.activeBorder": "#B2B2B1", + + "list.activeSelectionForeground": "#cecece", + "list.activeSelectionBackground": "#212121", + "list.inactiveSelectionForeground": "#cecece", + "list.inactiveSelectionBackground": "#212121", + "list.hoverBackground": "#212121", + "list.focusBackground": "#212121", + "list.dropBackground": "#333332", + "list.highlightForeground": "#F8F8F2", + "list.errorForeground": "#F3002B", + "list.warningForeground": "#cecece", + + "activityBar.foreground": "#f5f5f5", + "activityBar.background": "#080808", + "activityBarBadge.foreground": "#080808", + "activityBarBadge.background": "#cecece", + + "sideBar.foreground": "#8C8C8A", + "sideBar.background": "#0c0c0c", + "sideBarSectionHeader.foreground": "#B2B2B1", + "sideBarSectionHeader.background": "#212121", + + "terminal.background": "#080808", + + "editorGroup.dropBackground": "#00000040", + "editorGroupHeader.tabsBackground": "#080808", + "tab.activeBorderTop": "#cecece", + "tab.unfocusedActiveBorderTop": "#080808", + "tab.border": "#080808", + "tab.activeBorder": "#080808", + "tab.activeBackground": "#000000", + "tab.inactiveBackground": "#212121", + "tab.unfocusedActiveBorder": "#080808", + "tab.hoverBackground": "#080808", + "tab.inactiveForeground": "#B2B2B1", + "tab.unfocusedActiveForeground": "#D0D0D0", + "tab.unfocusedInactiveForeground": "#8C8C8A", + + "editor.foreground": "#F8F8F2", + "editor.background": "#080808", + "editorLineNumber.foreground": "#50504F", + "editorCursor.foreground": "#D0D0D0", + + "editor.selectionBackground": "#50504F", + "editor.selectionHighlightBackground": "#3D3D3C", + "editor.inactiveSelectionBackground": "#3D3D3C", + "editor.wordHighlightBackground": "#333332", + "editor.wordHighlightStrongBackground": "#5b422c", + + "editor.findMatchBackground": "#43a047", + "editor.findMatchHighlightBackground": "#5b422c", + "editor.findRangeHighlightBackground": "#50504F4D", + + "editor.hoverHighlightBackground": "#333332", + "editor.lineHighlightBackground": "#212121", + "editor.lineHighlightBorder": "#292928", + "editorLink.activeForeground": "#8C8C8A", + "editor.rangeHighlightBackground": "#50504F4D", + "editorWhitespace.foreground": "#333332", + "editorIndentGuide.background": "#333332", + "editorIndentGuide.activeBackground": "#50504F", + "editorRuler.foreground": "#333332", + "editorCodeLens.foreground": "#6D6D6D", + "editorBracketMatch.background": "#333332", + "editorBracketMatch.border": "#50504F", + + "editorOverviewRuler.findMatchForeground": "#DA0093", + "editorOverviewRuler.rangeHighlightForeground": "#50504F", + "editorOverviewRuler.selectionHighlightForeground": "#8C8C8A", + "editorOverviewRuler.wordHighlightForeground": "#8C8C8A", + "editorOverviewRuler.wordHighlightStrongForeground": "#DA0093", + "editorOverviewRuler.modifiedForeground": "#cecece", + "editorOverviewRuler.addedForeground": "#00F3C9", + "editorOverviewRuler.deletedForeground": "#F3002B", + "editorOverviewRuler.errorForeground": "#F3002B", + "editorOverviewRuler.warningForeground": "#cecece", + "editorOverviewRuler.infoForeground": "#00F3C9", + + "editorError.foreground": "#F3002B", + "editorWarning.foreground": "#cecece", + "editorInfo.foreground": "#00F3C9", + "editorHint.foreground": "#A9B9B0", + + "editorGutter.modifiedBackground": "#cecece", + "editorGutter.addedBackground": "#00F3C9", + "editorGutter.deletedBackground": "#F3002B", + + "diffEditor.insertedTextBackground": "#00A78A40", + "diffEditor.removedTextBackground": "#A7001D40", + + "editorWidget.background": "#292928", + "editorWidget.border": "#3D3D3C", + "editorSuggestWidget.foreground": "#D0D0D0", + "editorSuggestWidget.border": "#292928", + "editorSuggestWidget.highlightForeground": "#F8F8F2", + "editorSuggestWidget.selectedBackground": "#3D3D3C", + "editorHoverWidget.background": "#333332", + "editorHoverWidget.border": "#333332", + + "debugExceptionWidget.background": "#F3002B", + "debugExceptionWidget.border": "#F3002B", + + "editorMarkerNavigation.background": "#1F1F1E", + "editorMarkerNavigationError.background": "#F3002B", + "editorMarkerNavigationWarning.background": "#cecece", + + "peekView.border": "#00A4F3", + "peekViewEditor.background": "#0B0B0B", + "peekViewEditor.matchHighlightBackground": "#DA0093", + "peekViewResult.background": "#292928", + "peekViewResult.fileForeground": "#F8F8F2", + "peekViewResult.lineForeground": "#D0D0D0", + "peekViewResult.matchHighlightBackground": "#8E005F", + "peekViewResult.selectionBackground": "#0B0B0B", + "peekViewResult.selectionForeground": "#F8F8F2", + "peekViewTitle.background": "#00A4F3", + "peekViewTitleDescription.foreground": "#FFFFFF", + "peekViewTitleLabel.foreground": "#FFFFFF", + + "merge.currentHeaderBackground": "#007460", + "merge.currentContentBackground": "#0074604D", + "merge.incomingHeaderBackground": "#0070A7", + "merge.incomingContentBackground": "#0070A74D", + "editorOverviewRuler.currentContentForeground": "#00F3C9", + "editorOverviewRuler.incomingContentForeground": "#00A4F3", + + "panel.background": "#080808", + "panel.border": "#3D3D3C", + "panelTitle.activeBorder": "#00A4F3", + "panelTitle.activeForeground": "#FFFFFF", + "panelTitle.inactiveForeground": "#8C8C8A", + + + + + "statusBar.foreground": "#878787", + "statusBar.background": "#080808", + "statusBar.debuggingForeground": "#F8F8F2", + "statusBar.debuggingBackground": "#F34F00", + "statusBar.noFolderForeground": "#878787", + "statusBar.noFolderBackground": "#080808", + "statusBarItem.hoverBackground": "#0B0B0B", + "statusBarItem.activeBackground": "#000000", + + "titleBar.activeBackground": "#080808", + "titleBar.activeForeground": "#878787", + "titleBar.inactiveBackground": "#080808", + "titleBar.inactiveForeground": "#878787", + + "notificationCenterHeader.foreground": "#B2B2B1", + "notificationCenterHeader.background": "#3D3D3C", + "notifications.foreground": "#F8F8F2", + "notifications.background": "#292928", + "notifications.border": "#3D3D3C", + "notificationLink.foreground": "#00A4F3", + + "notification.background": "#3D3D3C", + "notification.foreground": "#F8F8F2", + "notification.buttonForeground": "#FFFFFF", + "notification.buttonBackground": "#00A4F3", + "notification.buttonHoverBackground": "#0093DA", + "notification.infoBackground": "#00F3C9", + "notification.infoForeground": "#007460", + "notification.warningBackground": "#cecece", + "notification.warningForeground": "#746000", + "notification.errorBackground": "#F3002B", + "notification.errorForeground": "#42000C", + + "extensionButton.prominentForeground": "#FFFFFF", + "extensionButton.prominentBackground": "#00A4F3", + "extensionButton.prominentHoverBackground": "#0093DA", + + + + "pickerGroup.border": "#cecece", + "pickerGroup.foreground": "#cecece", + + "debugToolBar.background": "#3D3D3C", + + "welcomePage.buttonBackground": "#292928", + "welcomePage.buttonHoverBackground": "#0B0B0B", + "walkThrough.embeddedEditorBackground": "#0B0B0B", + + "gitDecoration.modifiedResourceForeground": "#cecece", + "gitDecoration.deletedResourceForeground": "#F3002B", + "gitDecoration.untrackedResourceForeground": "#00F3C9", + "gitDecoration.ignoredResourceForeground": "#8C8C8A", + "gitDecoration.conflictingResourceForeground": "#FF41C1", + + "breadcrumb.foreground": "#6D6D6D", + "breadcrumb.focusForeground": "#8C8C8A", + "breadcrumb.activeSelectionForeground": "#D0D0D0", + "breadcrumbPicker.background": "#292928", + + "menu.background": "#0c0c0c", + "menu.foreground": "#8C8C8A", + "menu.selectionBackground": "#212121", + "menu.selectionForeground": "#cecece", + "menubar.selectionBackground": "#212121", + "menubar.selectionForeground": "#cecece", + + + // As of Feb-2025, vscode does not allow the specification of which brackets are colorized + // inside a theme file. '>' and '<' therefore use bracket colors. Edit your global settings + // (within a nim-language section). + + // Bracket colors by nesting level + "editorBracketHighlight.foreground1": "#EFEF8F", + "editorBracketHighlight.foreground2": "#BFEF9F", + "editorBracketHighlight.foreground3": "#EFCFAF", + "editorBracketHighlight.foreground4": "#EFEF8F", + "editorBracketHighlight.foreground5": "#BFEF9F", + "editorBracketHighlight.foreground6": "#EFCFAF", + "editorBracketHighlight.unexpectedBracket.foreground": "#EF5F5F", + + // Active indent guide colors + "editorIndentGuide.activeBackground1": "#0f0f4f", + "editorIndentGuide.activeBackground2": "#003f3f", + "editorIndentGuide.activeBackground3": "#004f00", + "editorIndentGuide.activeBackground4": "#3f3f00", + "editorIndentGuide.activeBackground5": "#500000", + "editorIndentGuide.activeBackground6": "#3f003f", + + // Inactive indent guide colors + "editorIndentGuide.background1": "#2f2f2f", + "editorIndentGuide.background2": "#2f2f2f", + "editorIndentGuide.background3": "#2f2f2f", + "editorIndentGuide.background4": "#2f2f2f", + "editorIndentGuide.background5": "#2f2f2f", + "editorIndentGuide.background6": "#2f2f2f" + + } +} \ No newline at end of file