Skip to content

Latest commit

 

History

History
365 lines (277 loc) · 11.5 KB

README.zh-CN.md

File metadata and controls

365 lines (277 loc) · 11.5 KB

English | 中文

AutoHotkey v2 语言支持

(此软件源是 https://github.com/thqby/vscode-autohotkey2-lsp 的分叉)

installs version

仓库: Github | Gitee

AutoHotkey v2 语言支持 for VS Code, 功能实现基于 v2 语法分析。 支持在Chrome/Edge等浏览器中使用 https://vscode.devhttps://github.dev/github/dev

如果你想捐款,捐款可以寄到这里: 支付宝转账支付宝二维码paypal

语言特性

重命名符号

作用域范围内的变量、函数名批量重命名。

rename

错误诊断

简单语法错误诊断。

diagnostics

智能感知

支持对作用域范围内的变量、函数、参数、类名、方法名智能补全(简单的类型推导),支持对 include 文件和函数库补全。

snippet1

snippet2

智能提示

支持对函数、方法参数的智能提示。

signature

大纲

  1. 在左侧大纲栏目显示类、方法、函数、变量、标签、热键、热字串、区块信息
  2. 按 Ctrl + P, 输入@符号名检索并跳转
  3. 您可以在函数、变量的上一行使用分号或/* */向方法添加注释, jsdoc 样式的注释可以标记变量类型
/**
 * @param {Array} a - a param
 * @return {Integer}
 */
fn(a*) {
  /** @type {Map} */
  d := Map()
  /**
   * @var {Map} e
   * @var {Object} f
   */
  e := Map(), f := {}
  /** @type {(a,b)=>Integer} */
  cb := (a, b) => a + b
  /** @type {ComObject<Excel.Sheet.12,Workbook>} */
  wb := ComObject('Excel.Sheet.12')
  return a[1] + a[2]
}
class abc {
  /** @type {Map} */
  p := dosomethingandreturnmap()
}

语义高亮

语义高亮显示是语法高亮显示的补充,改进和改进语法中的语法突出显示。编辑器在来自语法的高亮显示之上应用来自语义标记的高亮显示。 semanticTokens

代码标记

用法: 在注释代码块中添加;;(默认)或; TODO
codeSymbole

颜色提示

计算并解析文档中的颜色,并提供颜色选择器更直观地修改颜色数据。

documentcolor

悬停提示

支持对作用域范围内变量、函数、全局类、标签的悬停提示并显示相关备注。
用法: 移动鼠标到相关符号上。
hover

转到定义

  1. 支持跳转到作用域范围内变量、函数、全局类、标签的声明位置。
  2. 用法: 按住 ctrl 然后移动鼠标到代码处点击。

gotoDefinition

查找所有引用

查看正在使用某个变量/函数的所有源代码位置。

代码格式化

用法:

  • 右键弹出菜单然后点击 格式化文档。
  • 或按 Shift+Alt+F
  • 支持在键入}时格式化代码块,在代码行结束处键入\n时格式化行并缩进。支持在代码区(非注释、字符串)输入中文标点时替换为英文标点。 (需要开启editor.format OnType)
  • 支持使用格式化指令;@format array_style: collapse, object_style: expand改变不同块的对象样式

codeFormat

自定义折叠

折叠;@region tag;@endregion之间部分, ;{;}之间部分

;@region tag
code
;@endregion

声明文件

声明文件是以 .d.ahk 为文件名后缀的文件, 用来描述已实现的函数或类等, 不包含代码的实现部分, 默认被同名的ahk文件引用, 语法参考扩展提供的 ahk2.d.ahk. 声明文件可以扩展或改写ahk内置函数或类的声明, 也可以将注释文档从源码中分离来提供多语言版本的智能感知等. 另外, 可以修改扩展的AutoHotkey2.Syntaxes设置项将内置声明文件替换为第三方的声明文件, 如GroggyOtter's ahkv2_definition_rewrite.

; array.d.ahk
; #ClsName represents the ahk built-in class
/** @extends {#Array} */
class Array<T = Any> {
  /** jsdoc-默认 */
  Filter(FilterFunc) => Array<T>
}

; array.zh-cn.d.ahk
; #ClsName 表示ahk内置类
/** @extends {#Array} */
class Array<T = Any> {
  /** jsdoc-zh */
  Filter(FilterFunc) => Array<T>
}

; array.ahk
; %A_Locale% 是VSCode的显示语言
;@reference array.%A_Locale%.d.ahk
Array.Prototype.DefineProp('Filter', { call: Array_Filter_impl })

上下文菜单

快速帮助

打开帮助文件并导航到当前光标处的关键字。

运行脚本

运行当前打开的脚本。

运行选定的脚本

运行光标选择范围的代码片段。

编译脚本

编译脚本生成可执行的 EXE 文件。

调试脚本

无需额外配置即可启动已安装的调试扩展,支持带参数调试。

生成注释

为函数或方法生成 JSDOC 样式的注释文档。

在其他编辑器中使用

  1. 安装Node.js
  2. 用命令行下载 vscode-autohotkey2-lsp 服务端, 或通过vscode marketplace下载并解包。
mkdir vscode-autohotkey2-lsp
cd vscode-autohotkey2-lsp
curl.exe -L -o install.js https://raw.githubusercontent.com/thqby/vscode-autohotkey2-lsp/main/tools/install.js
node install.js
  1. 设置支持LSP(语言服务器协议)的编辑器的 LSP 配置, 例如 Sublime Text4, Vim, Neovim, Emacs,

Sublime Text 4

  • Package Control: Install Package, 安装Sublime LSP插件
  • Preferences: LSP Settings, 增加 lsp 配置、语言选择器和语法高亮. 这是一个简单的语法高亮示例, 存放在类似路径下 C:\Users\<USERNAME>\AppData\Roaming\Sublime Text\Packages\User\LSP-ahk2\AutoHotkey2.sublime-syntax
{
	"clients": {
		"lsp-ahk2": {
			"enabled": true,
			"command": [
				"node",
				"<VSCODE-AUTOHOTKEY2-LSP>/server/dist/server.js",
				"--stdio"
			], // 更新node.exe的路径(可能已经在环境变量中,所以你不需要设置)和vscode-autohotkey2-lsp的文件夹
			"selector": "source.ahk2", // 与AutoHotkey2.sublime-syntax中的scope相同
			"schemes": ["file", "buffer", "res"],
			"initializationOptions": {
				"locale": "en-us", // or "zh-cn"
				"AutoLibInclude": "Disabled", // or "Local" or "User and Standard" or "All"
				"CommentTags": "^;;\\s*(?<tag>.+)",
				"CompleteFunctionParens": false,
				"Diagnostics": {
					"ClassStaticMemberCheck": true,
					"ParamsCheck": true
				},
				"ActionWhenV1IsDetected": "Continue",
				"FormatOptions": {
					"array_style": "none", // or "collapse" or "expand"
					"break_chained_methods": false,
					"ignore_comment": false,
					"indent_string": "\t",
					"max_preserve_newlines": 2,
					"brace_style": "One True Brace", // or "Allman" or "One True Brace Variant"
					"object_style": "none", // or "collapse" or "expand"
					"preserve_newlines": true,
					"space_after_double_colon": true,
					"space_before_conditional": true,
					"space_in_empty_paren": false,
					"space_in_other": true,
					"space_in_paren": false,
					"wrap_line_length": 0
				},
				"InterpreterPath": "C:/Program Files/AutoHotkey/v2/AutoHotkey.exe",
				"WorkingDirs": [],
				"SymbolFoldingFromOpenBrace": false
			}
		}
	},
	"semantic_highlighting": true
}

Vim 和 Neovim

COC

cd $VIMRUNTIME\plugin
git clone --branch release https://github.com/neoclide/coc.nvim.git --depth=1
  • 打开(n)vim, 输入命令 :CocConfig 进入coc.nvim配置文件增加配置信息。
{
	"languageserver": {
		"lsp-ahk2": {
			"module": "<VSCODE-AUTOHOTKEY2-LSP>/server/dist/server.js",
			"filetypes": ["autohotkey"],
			"args": ["--node-ipc"],
			"initializationOptions": {
				// Same as initializationOptions for Sublime Text4
			}
		}
	}
}

nvim-lspconfig

  • 下载nvim-lspconfig
  • 将以下内容添加到您的NVIM配置中(init.lua 等). 确定cmd指向vscode-autohotkey2-lsp的安装路径,InterpreterPath指向AHK exe.
local function custom_attach(client, bufnr)
  require("lsp_signature").on_attach({
    bind = true,
    use_lspsaga = false,
    floating_window = true,
    fix_pos = true,
    hint_enable = true,
    hi_parameter = "Search",
    handler_opts = { "double" },
  })
end

local ahk2_configs = {
  autostart = true,
  cmd = {
    "node",
    vim.fn.expand("$HOME/vscode-autohotkey2-lsp/server/dist/server.js"),
    "--stdio"
  },
  filetypes = { "ahk", "autohotkey", "ah2" },
  init_options = {
    locale = "en-us",
    InterpreterPath = "C:/Program Files/AutoHotkey/v2/AutoHotkey.exe",
    -- Same as initializationOptions for Sublime Text4, convert json literal to lua dictionary literal
  },
  single_file_support = true,
  flags = { debounce_text_changes = 500 },
  capabilities = capabilities,
  on_attach = custom_attach,
}
local configs = require "lspconfig.configs"
configs["ahk2"] = { default_config = ahk2_configs }
local nvim_lsp = require("lspconfig")
nvim_lsp.ahk2.setup({})

Emacs

Eglot

  • 将以下内容添加到您的emacs配置文件中
(add-to-list 'eglot-server-programs '(ahk-mode "node" "<VSCODE-AUTOHOTKEY2-LSP>/server/dist/server.js" "--stdio"))

在 Web 浏览器中使用

Chrome/Edge中打开 https://github.devhttps://vscode.dev, 然后安装thqby.vscode-autohotkey2-lsp