Files
godot-vscode-plugin/package.json
Daelon Suzuka e7e2d0439d Various QoL Improvements (#529)
* Updated Godot icons (and removed old ones)
* Improve "Debug Pinned Scene" command by making the pinned scene persist between VSCode sessions
* Fix scene file highlighting not working 
* Fix ScenePreview not working in Godot 3
* Add buttons for relevant actions to ScenePreview items
* Add internal document links for SubResource() and ExtResource() statements in scene files
* Add hover for SubResource() and ExtResource() statements in scene files
* Improve ability to right click -> open docs for methods of builtin types (doesn't always work)
* Add a file decorator to show the pinned debug file in the filesystem view/editor tabs
* Add item decorators to the Scene Preview to show Node attributes more clearly
* Updated readme
* Overhauled documentation viewer
* Added GDScript formatter
* Add (disabled) experimental providers for custom completions, semantic tokens, and tasks
* Lots of internal refactoring
2023-12-06 06:53:10 -08:00

841 lines
22 KiB
JSON

{
"name": "godot-tools",
"displayName": "godot-tools",
"icon": "icon.png",
"version": "2.0.0",
"description": "Tools for game development with Godot Engine and GDScript",
"repository": {
"type": "git",
"url": "https://github.com/godotengine/godot-vscode-plugin"
},
"bugs": {
"url": "https://github.com/godotengine/godot-vscode-plugin/issues"
},
"license": "MIT",
"author": "The Godot Engine community",
"publisher": "geequlim",
"engines": {
"vscode": "^1.80.0"
},
"categories": [
"Programming Languages",
"Linters",
"Snippets",
"Debuggers",
"Formatters",
"Other"
],
"activationEvents": [
"workspaceContains:project.godot",
"onDebugResolve:godot"
],
"main": "./out/extension.js",
"scripts": {
"compile": "tsc -p ./",
"lint": "eslint ./src --quiet",
"watch": "tsc -watch -p ./",
"package": "vsce package",
"vscode:prepublish": "npm run esbuild-base -- --minify",
"esbuild-base": "esbuild ./src/extension.ts --bundle --outfile=out/extension.js --external:vscode --format=cjs --platform=node",
"esbuild": "npm run esbuild-base -- --sourcemap",
"esbuild-watch": "npm run esbuild-base -- --sourcemap --watch",
"generate-icons": "ts-node tools/generate_icons.ts",
"test": "vscode-test"
},
"contributes": {
"customEditors": [
{
"viewType": "gddoc",
"displayName": "Godot Documentation",
"selector": [
{
"filenamePattern": "*.gddoc"
}
]
}
],
"commands": [
{
"category": "Godot Tools",
"command": "godotTools.openEditor",
"title": "Open workspace with Godot editor"
},
{
"category": "Godot Tools",
"command": "godotTools.startLanguageServer",
"title": "Start the GDScript Language Server for this workspace"
},
{
"category": "Godot Tools",
"command": "godotTools.stopLanguageServer",
"title": "Stop the GDScript Language Server for this workspace"
},
{
"category": "Godot Tools",
"command": "godotTools.listGodotClasses",
"title": "List Godot classes"
},
{
"category": "Godot Tools",
"command": "godotTools.debugger.inspectNode",
"title": "Inspect Remote Node",
"icon": {
"light": "resources/godot_icons/light/GuiVisibilityVisible.svg",
"dark": "resources/godot_icons/dark/GuiVisibilityVisible.svg"
}
},
{
"category": "Godot Tools",
"command": "godotTools.debugger.refreshSceneTree",
"title": "Refresh",
"icon": {
"light": "resources/godot_icons/light/Reload.svg",
"dark": "resources/godot_icons/dark/Reload.svg"
}
},
{
"category": "Godot Tools",
"command": "godotTools.debugger.refreshInspector",
"title": "Refresh",
"icon": {
"light": "resources/godot_icons/light/Reload.svg",
"dark": "resources/godot_icons/dark/Reload.svg"
}
},
{
"category": "Godot Tools",
"command": "godotTools.debugger.editValue",
"title": "Edit value",
"icon": {
"light": "resources/godot_icons/light/Edit.svg",
"dark": "resources/godot_icons/dark/Edit.svg"
}
},
{
"category": "Godot Tools",
"command": "godotTools.debugger.debugCurrentFile",
"title": "Debug Current File",
"icon": {
"light": "resources/godot_icons/light/PlayScene.svg",
"dark": "resources/godot_icons/dark/PlayScene.svg"
}
},
{
"category": "Godot Tools",
"command": "godotTools.debugger.debugPinnedFile",
"title": "Debug Pinned File",
"icon": {
"light": "resources/godot_icons/light/Play.svg",
"dark": "resources/godot_icons/dark/Play.svg"
}
},
{
"category": "Godot Tools",
"command": "godotTools.debugger.pinFile",
"title": "Pin Scene File",
"icon": "resources/pin_off.svg"
},
{
"category": "Godot Tools",
"command": "godotTools.debugger.unpinFile",
"title": "Unpin Scene File",
"icon": "resources/pin_on.svg"
},
{
"category": "Godot Tools",
"command": "godotTools.debugger.openPinnedFile",
"title": "Open the currently pinned scene"
},
{
"category": "Godot Tools",
"command": "godotTools.scenePreview.refresh",
"title": "Refresh Scene Preview"
},
{
"category": "Godot Tools",
"command": "godotTools.scenePreview.pin",
"title": "Pin Scene Preview",
"icon": "resources/pin_off.svg"
},
{
"category": "Godot Tools",
"command": "godotTools.scenePreview.unpin",
"title": "Unpin Scene Preview",
"icon": "resources/pin_on.svg"
},
{
"category": "Godot Tools",
"command": "godotTools.scenePreview.goToDefinition",
"title": "Go to Definition"
},
{
"category": "Godot Tools",
"command": "godotTools.scenePreview.openDocumentation",
"title": "Open Documentation"
},
{
"category": "Godot Tools",
"command": "godotTools.scenePreview.copyNodePath",
"title": "Copy Node Path"
},
{
"category": "Godot Tools",
"command": "godotTools.scenePreview.copyResourcePath",
"title": "Copy Resource Path"
},
{
"category": "Godot Tools",
"command": "godotTools.scenePreview.openScene",
"title": "Open Scene",
"icon": {
"light": "resources/InstanceOptions.svg",
"dark": "resources/InstanceOptions.svg"
}
},
{
"category": "Godot Tools",
"command": "godotTools.scenePreview.openScript",
"title": "Open Script",
"icon": {
"light": "resources/godot_icons/light/Script.svg",
"dark": "resources/godot_icons/dark/Script.svg"
}
},
{
"category": "Godot Tools",
"command": "godotTools.switchSceneScript",
"title": "Switch Scene/Script"
},
{
"category": "Godot Tools",
"command": "godotTools.copyResourcePath",
"title": "Copy Resource Path"
}
],
"keybindings": [
{
"command": "godotTools.switchSceneScript",
"key": "alt+o",
"when": "editorLangId in godotTools.context.godotFiles && editorTextFocus"
}
],
"configuration": {
"type": "object",
"title": "Godot Tools",
"properties": {
"godotTools.editorPath.godot3": {
"type": "string",
"default": "godot3",
"description": "The absolute path to the Godot 3 editor executable"
},
"godotTools.editorPath.godot4": {
"type": "string",
"default": "godot4",
"description": "The absolute path to the Godot 4 editor executable"
},
"godotTools.lsp.serverProtocol": {
"type": [
"string"
],
"enum": [
"ws",
"tcp"
],
"default": "tcp",
"enumDescriptions": [
"Use the WebSocket protocol to connect to Godot 3.2 and Godot 3.2.1",
"Use the TCP protocol to connect to Godot 3.2.2 and newer versions"
],
"description": "The server protocol of the GDScript language server.\nYou must restart VSCode after changing this value."
},
"godotTools.lsp.serverHost": {
"type": "string",
"default": "127.0.0.1",
"description": "The server host of the GDScript language server"
},
"godotTools.lsp.serverPort": {
"type": "number",
"default": 6008,
"description": "The server port of the GDScript language server"
},
"godotTools.lsp.headless": {
"type": "boolean",
"default": false,
"description": "Whether to launch the LSP as a headless child process"
},
"godotTools.lsp.autoReconnect.enabled": {
"type": "boolean",
"default": true,
"description": "Whether the plugin should attempt to reconnect to the GDScript language server"
},
"godotTools.lsp.autoReconnect.cooldown": {
"type": "number",
"default": 3000,
"description": "The number of milliseconds to wait before attempting to reconnect"
},
"godotTools.lsp.autoReconnect.attempts": {
"type": "number",
"default": 10,
"description": "How many times the client will attempt to reconnect"
},
"godotTools.scenePreview.previewRelatedScenes": {
"enum": [
"anyFolder",
"sameFolder",
"off"
],
"enumDescriptions": [
"Attempt to preview a related scene from anywhere in the workspace.",
"Attempt to preview a related scene from the same folder.",
"Do not attempt to preview a related scene."
],
"default": "sameFolder",
"description": "Controls where the Scene Preview will search for related scenes when viewing a script file."
}
}
},
"languages": [
{
"id": "gdscript",
"aliases": [
"GDScript",
"gdscript"
],
"extensions": [
".gd"
],
"configuration": "./configurations/gdscript.language-configuration.json"
},
{
"id": "gdscene",
"aliases": [
"GDScene",
"gdscene"
],
"extensions": [
"tscn"
],
"configuration": "./configurations/gdresource.language-configuration.json"
},
{
"id": "gdresource",
"aliases": [
"GDResource",
"gdresource"
],
"extensions": [
"godot",
"tres",
"import",
"gdns",
"gdnlib"
],
"configuration": "./configurations/gdresource.language-configuration.json"
},
{
"id": "gdshader",
"aliases": [
"gdshader"
],
"extensions": [
".gdshader",
".gdshaderinc"
],
"configuration": "./configurations/gdshader.language-configuration.json"
}
],
"grammars": [
{
"language": "gdscript",
"scopeName": "source.gdscript",
"path": "./syntaxes/GDScript.tmLanguage.json"
},
{
"language": "gdresource",
"scopeName": "source.gdresource",
"path": "./syntaxes/GDResource.tmLanguage.json"
},
{
"language": "gdscene",
"scopeName": "source.gdresource",
"path": "./syntaxes/GDResource.tmLanguage.json"
},
{
"language": "gdshader",
"scopeName": "source.gdshader",
"path": "./syntaxes/GDShader.tmLanguage.json"
}
],
"semanticTokenScopes": [
{
"scopes": {
"nodePath": [
"constant.character.escape"
]
}
}
],
"snippets": [
{
"language": "gdscript",
"path": "./configurations/snippets.json"
}
],
"debuggers": [
{
"type": "godot",
"label": "GDScript Godot Debug",
"runtime": "node",
"configurationAttributes": {
"launch": {
"required": [],
"properties": {
"project": {
"type": "string",
"description": "Absolute path to a directory with a project.godot file.",
"default": "${workspaceFolder}"
},
"address": {
"type": "string",
"description": "The IP address for the Godot remote debugger to use.",
"default": "127.0.0.1"
},
"port": {
"type": "number",
"description": "The port number for the Godot remote debugger to use.",
"default": 6007
},
"scene": {
"type": "string",
"enum": [
"main",
"current",
"pinned"
],
"enumDescriptions": [
"Launch the 'main_scene' specified in project.godot",
"Launch the scene (or related scene) in the current editor",
"Launch the pinned scene"
],
"description": "Scene file to run when debugging. Choices are 'main', 'current', 'pinned', or providing a custom path to a scene.",
"default": ""
},
"editor_path": {
"type": "string",
"description": "Absolute path to the Godot executable to be used for this debug profile.",
"default": false
},
"profiling": {
"type": "boolean",
"description": "Enable profiling in the script debugger.",
"default": false
},
"single_threaded_scene": {
"type": "boolean",
"description": "Scene tree runs in single-threaded mode. Sub-thread groups are disabled and run on the main thread. (Godot 4 only)",
"default": false
},
"debug_collisions": {
"type": "boolean",
"description": "Show collision shapes when running the scene.",
"default": false
},
"debug_paths": {
"type": "boolean",
"description": "Show navigation polygons when running the scene. (Godot 4 only)",
"default": false
},
"debug_navigation": {
"type": "boolean",
"description": "Show navigation polygons when running the scene.",
"default": false
},
"debug_avoidance": {
"type": "boolean",
"description": "Show navigation avoidance debug visuals when running the scene. (Godot 4 only)",
"default": false
},
"debug_stringnames": {
"type": "boolean",
"description": "Print all StringName allocations to stdout when the engine quits. (Godot 4 only)",
"default": false
},
"frame_delay": {
"type": "number",
"description": "Simulate high CPU load (delay each frame by <ms> milliseconds)."
},
"time_scale": {
"type": "number",
"description": "Force time scale (higher values are faster, 1.0 is normal speed)."
},
"disable_vsync": {
"type": "boolean",
"description": "Forces disabling of vertical synchronization, even if enabled in the project settings. Does not override driver-level V-Sync enforcement. (Godot 4 only)",
"default": false
},
"fixed_fps": {
"type": "number",
"description": "Force a fixed number of frames per second. This setting disables real-time synchronization."
},
"additional_options": {
"type": "string",
"description": "Additional command line arguments.",
"default": ""
}
}
},
"attach": {
"required": [],
"properties": {
"address": {
"type": "string",
"description": "The IP address for the Godot remote debugger to use.",
"default": "127.0.0.1"
},
"port": {
"type": "number",
"description": "The port number for the Godot remote debugger to use.",
"default": 6007
}
}
}
},
"initialConfigurations": [
{
"name": "GDScript: Launch Project",
"type": "godot",
"request": "launch",
"project": "${workspaceFolder}",
"debug_collisions": false,
"debug_paths": false,
"debug_navigation": false,
"additional_options": ""
}
],
"configurationSnippets": [
{
"label": "GDScript: Launch Project",
"description": "A config to launch the current project.",
"body": {
"name": "GDScript: Launch Project",
"type": "godot",
"request": "launch",
"project": "${workspaceFolder}",
"debug_collisions": false,
"debug_paths": false,
"debug_navigation": false,
"additional_options": ""
}
},
{
"label": "GDScript: Launch Current File",
"description": "A config to launch the currently open scene.",
"body": {
"name": "GDScript: Launch Current File",
"type": "godot",
"request": "launch",
"scene": "current",
"project": "${workspaceFolder}",
"additional_options": ""
}
},
{
"label": "GDScript: Launch Pinned File",
"description": "A config to launch the currently pinned scene.",
"body": {
"name": "GDScript: Launch Pinned File",
"type": "godot",
"request": "launch",
"scene": "pinned",
"project": "${workspaceFolder}",
"additional_options": ""
}
}
]
}
],
"breakpoints": [
{
"language": "gdscript"
}
],
"viewsContainers": {
"activitybar": [
{
"id": "godotTools",
"title": "Godot Tools",
"icon": "resources/godot_icon.svg"
}
]
},
"views": {
"debug": [
{
"id": "activeSceneTree",
"name": "Active Scene Tree"
},
{
"id": "inspectNode",
"name": "Inspector"
}
],
"godotTools": [
{
"id": "scenePreview",
"name": "Scene Preview"
}
]
},
"viewsWelcome": [
{
"view": "activeSceneTree",
"contents": "Scene Tree data has not been requested"
},
{
"view": "inspectNode",
"contents": "Node has not been inspected"
},
{
"view": "scenePreview",
"contents": "Open a Scene to see a preview of its structure"
}
],
"menus": {
"commandPalette": [
{
"command": "godotTools.listGodotClasses",
"when": "godotTools.context.connectedToLSP"
},
{
"command": "godotTools.scenePreview.refresh",
"when": "false"
},
{
"command": "godotTools.scenePreview.goToDefinition",
"when": "false"
},
{
"command": "godotTools.scenePreview.openDocumentation",
"when": "false"
},
{
"command": "godotTools.scenePreview.pin",
"when": "false"
},
{
"command": "godotTools.scenePreview.unpin",
"when": "false"
},
{
"command": "godotTools.scenePreview.copyNodePath",
"when": "false"
},
{
"command": "godotTools.scenePreview.copyResourcePath",
"when": "false"
},
{
"command": "godotTools.scenePreview.openScript",
"when": "false"
},
{
"command": "godotTools.scenePreview.openScene",
"when": "false"
},
{
"command": "godotTools.debugger.editValue",
"when": "false"
},
{
"command": "godotTools.debugger.inspectNode",
"when": "false"
},
{
"command": "godotTools.debugger.refreshSceneTree",
"when": "false"
},
{
"command": "godotTools.debugger.refreshInspector",
"when": "false"
}
],
"view/title": [
{
"command": "godotTools.debugger.refreshSceneTree",
"when": "view == activeSceneTree",
"group": "navigation"
},
{
"command": "godotTools.debugger.refreshInspector",
"when": "view == inspectNode",
"group": "navigation"
},
{
"command": "godotTools.scenePreview.pin",
"when": "view == scenePreview && !godotTools.context.scenePreview.pinned",
"group": "navigation"
},
{
"command": "godotTools.scenePreview.unpin",
"when": "view == scenePreview && godotTools.context.scenePreview.pinned",
"group": "navigation"
}
],
"view/item/context": [
{
"command": "godotTools.debugger.inspectNode",
"when": "view == activeSceneTree",
"group": "inline"
},
{
"command": "godotTools.debugger.inspectNode",
"when": "view == inspectNode && viewItem == remote_object",
"group": "inline"
},
{
"command": "godotTools.debugger.editValue",
"when": "view == inspectNode && viewItem == editable_value",
"group": "inline"
},
{
"command": "godotTools.scenePreview.goToDefinition",
"when": "view == scenePreview",
"group": "1@1"
},
{
"command": "godotTools.scenePreview.openDocumentation",
"when": "view == scenePreview",
"group": "1@1"
},
{
"command": "godotTools.scenePreview.copyNodePath",
"when": "view == scenePreview"
},
{
"command": "godotTools.scenePreview.copyResourcePath",
"when": "view == scenePreview && viewItem =~ /hasResourcePath/"
},
{
"command": "godotTools.scenePreview.openScene",
"when": "view == scenePreview && viewItem =~ /openable/",
"group": "1@2"
},
{
"command": "godotTools.scenePreview.openScript",
"when": "view == scenePreview && viewItem =~ /hasScript/",
"group": "1@2"
},
{
"command": "godotTools.scenePreview.openScene",
"when": "view == scenePreview && viewItem =~ /openable/",
"group": "inline"
},
{
"command": "godotTools.scenePreview.openScript",
"when": "view == scenePreview && viewItem =~ /hasScript/",
"group": "inline"
}
],
"explorer/context": [
{
"command": "godotTools.debugger.pinFile",
"group": "2_workspace",
"when": "resourceLangId in godotTools.context.sceneLikeFiles && !(resourcePath in godotTools.context.pinnedScene)"
},
{
"command": "godotTools.debugger.unpinFile",
"group": "2_workspace",
"when": "resourceLangId in godotTools.context.sceneLikeFiles && (resourcePath in godotTools.context.pinnedScene)"
},
{
"command": "godotTools.copyResourcePath",
"group": "6_copypath"
}
],
"editor/title/run": [
{
"command": "godotTools.debugger.debugCurrentFile",
"group": "navigation@10",
"when": "editorLangId in godotTools.context.sceneLikeFiles && !isInDiffEditor && !virtualWorkspace"
},
{
"command": "godotTools.debugger.debugPinnedFile",
"group": "navigation@10",
"when": "editorLangId in godotTools.context.sceneLikeFiles && !isInDiffEditor && !virtualWorkspace"
}
],
"editor/title": [
{
"command": "godotTools.debugger.pinFile",
"group": "navigation@11",
"when": "editorLangId in godotTools.context.sceneLikeFiles && !isInDiffEditor && !virtualWorkspace && !(resourcePath in godotTools.context.pinnedScene)"
},
{
"command": "godotTools.debugger.unpinFile",
"group": "navigation@11",
"when": "editorLangId in godotTools.context.sceneLikeFiles && !isInDiffEditor && !virtualWorkspace && (resourcePath in godotTools.context.pinnedScene)"
}
],
"editor/title/context": [
{
"command": "godotTools.copyResourcePath",
"group": "1_godot"
},
{
"command": "godotTools.debugger.pinFile",
"group": "1_godot",
"when": "resourceLangId in godotTools.context.sceneLikeFiles && !(resourcePath in godotTools.context.pinnedScene)"
},
{
"command": "godotTools.debugger.unpinFile",
"group": "1_godot",
"when": "resourceLangId in godotTools.context.sceneLikeFiles && (resourcePath in godotTools.context.pinnedScene)"
}
],
"editor/context": [
{
"command": "godotTools.switchSceneScript",
"when": "editorLangId in godotTools.context.godotFiles",
"group": "custom1@1"
}
]
}
},
"devDependencies": {
"@types/marked": "^4.0.8",
"@types/mocha": "^10.0.6",
"@types/node": "^18.15.0",
"@types/prismjs": "^1.16.8",
"@types/vscode": "^1.80.0",
"@types/ws": "^8.5.4",
"@typescript-eslint/eslint-plugin": "^5.57.1",
"@typescript-eslint/eslint-plugin-tslint": "^5.57.1",
"@typescript-eslint/parser": "^5.57.1",
"@vscode/test-cli": "^0.0.4",
"@vscode/test-electron": "^2.3.8",
"@vscode/vsce": "^2.21.0",
"esbuild": "^0.17.15",
"eslint": "^8.37.0",
"mocha": "^10.2.0",
"ts-node": "^10.9.1",
"tsconfig-paths": "^4.2.0",
"tslint": "^5.20.1",
"typescript": "^5.2.2"
},
"dependencies": {
"@vscode/debugadapter": "^1.64.0",
"@vscode/debugprotocol": "^1.64.0",
"await-notify": "^1.0.1",
"global": "^4.4.0",
"marked": "^4.0.11",
"net": "^1.0.2",
"prismjs": "^1.17.1",
"terminate": "^2.5.0",
"vscode-languageclient": "^7.0.0",
"vscode-oniguruma": "^2.0.1",
"vscode-textmate": "^9.0.0",
"ws": "^8.13.0",
"ya-bbcode": "^4.0.0"
}
}