HIP 语言 VSCode 扩展 —— 为 .hip 文件提供语法高亮与代码补全。
- 语法高亮:在完整 C++ 语法基础上,独立着色 HIP 特有的修饰符、Runtime API、类型和内置常量
- 代码补全:360+ 补全项,涵盖 HIP API、C++ 标准类型/关键字/标准库,支持 13 个代码片段(Tab 跳转)
- 智能排序:C++ 标准类型和关键字优先展示,HIP 专有 API 排在后方,用户自定义变量自然置顶
- 零配置:安装即用,不干扰 C/C++ 官方扩展(Microsoft C/C++、clangd)
# 1. 编译
npm install
npm run compile
# 2. 打包
vsce package
# 3. 安装
code --install-extension hip-language-support-0.2.1.vsix或直接在 VSCode 中:扩展面板 → ··· → 从 VSIX 安装
- VSCode
>= 1.85.0
| Token Scope | 内容 | 示例 |
|---|---|---|
keyword.control.hip |
函数/存储修饰符 + <<<>>> 语法 |
__global__, __shared__ |
support.function.hip |
Runtime API / 设备函数 / DCU 专属 | hipMalloc, __syncthreads, duDeviceFlushCache |
storage.type.hip |
HIP 特定类型 | dim3, hipStream_t, float4 |
constant.language.hip |
内置变量 / 错误码 / 拷贝方向 | threadIdx, hipSuccess, hipMemcpyHostToDevice |
所有 HIP token 作用域均以标准 C++ 命名空间为前缀,在不支持 HIP 自定义颜色的主题中自动回退为 C++ 对应颜色,视觉风格统一。
| 触发器 | 展开效果 |
|---|---|
hipLaunchKernelGGL |
hipLaunchKernelGGL(kernel, dimGrid, dimBlock, sharedMem, stream, args...) |
hipMemcpy |
hipMemcpy(dst, src, sizeBytes, hipMemcpyKind) |
__shfl |
__shfl(var, lane, warpSize) |
__shfl_up |
__shfl_up(var, delta, warpSize) |
__shfl_down |
__shfl_down(var, delta, warpSize) |
__shfl_xor |
__shfl_xor(var, laneMask, warpSize) |
__launch_bounds__ |
__launch_bounds__(MAX_THREADS_PER_BLOCK, MIN_WARPS_PER_EXECUTION_UNIT) |
| 触发器 | 展开效果 |
|---|---|
#include |
#include <header> |
main |
int main(int argc, char* argv[]) { ... } |
for |
for (int i = 0; i < n; i++) { ... } |
forr |
for (auto& item : container) { ... }(范围 for) |
printf |
printf("%s\n", args); |
cout |
std::cout << expr << std::endl; |
cin |
std::cin >> var; |
选中片段后按 Tab 在占位符间跳转。
hip-language-support/
├── package.json # 扩展清单
├── language-configuration.json # 括号匹配、注释规则
├── tsconfig.json
├── .vscodeignore
├── syntaxes/
│ └── hip-injection.json # TextMate 包含式语法
├── src/
│ └── extension.ts # 补全提供者
└── out/ # 编译产物
npm install # 安装依赖
npm run compile # 编译 TypeScript
npm run watch # 监听模式按 F5 启动扩展开发宿主,打开 .hip 文件验证。
C++ 兼容性增强与补全排序优化。
- 新增 C++ 标准类型补全:
int、float、double、size_t、unsigned int、int8_t~int64_t等 30+ 种类型 - 新增 C++ 关键字补全:
if、for、class、namespace、template、const、static等 60+ 个关键字 - 新增 C++ 标准库补全:
std::cin、std::cout、std::vector、std::sort、std::string等 70+ 个常用函数/容器 - 新增 C++ 代码片段:
main、for、forr(范围 for)、cout、cin、#include、printf - 移除向量类型:删除
int1int4、float1float4等非标准向量类型及其构造函数 - 优化补全排序:C++ 标准类型/关键字优先展示(
za_前缀),HIP 专有 API 排在后方(zz_前缀),用户自定义变量自然置顶
补全冲突修复:解决 HIP 关键字淹没用户自定义变量/函数名的问题(Issue #1)。
- 根因:
provideCompletionItems每次无条件返回全部 250+ 条 HIP 关键字,未按光标前缀过滤,大量无关项挤占了 VSCode 原生词法补全(editor.wordBasedSuggestions)的展示空间 - 修复:
- 新增前缀匹配过滤:获取光标处单词,仅返回
startsWith匹配的 HIP 关键字 - 无匹配时返回空数组
[](而非undefined),确保词法补全正常合并展示 - 行为变化:输入
myVar→ 不再弹出 250 条 HIP 关键字,VSCode 词法补全正常提示myVariable;输入hipM→ HIP 关键字与用户自定义hipMyFunction同屏共存
- 新增前缀匹配过滤:获取光标处单词,仅返回
语法高亮机制升级:从注入式改为包含式,修复 C++ 基础关键字无高亮问题。
hip-injection.json:- 移除
injectionSelector,改为完整语法定义 - 新增首行
{ "include": "source.cpp" },加载 C++ 全部规则后再叠加 HIP token <<<>>>内部$base改为$self,确保 kernel 参数也可复用 C++ 高亮
- 移除
package.json:- 版本号升至
0.2.1 - 移除
grammars.injectTo,避免include: "source.cpp"与注入模式产生递归
- 版本号升至
初始版本。包含 TextMate 注入式语法高亮(4 类 token scope)和 250+ 关键字补全提供者。
MIT