REnum 变体字段(如 LLVMType.Ptr 的 Pointee)常规声明查找找不到,语义 token 误显示 undefined。根因:描述符协议在 Viper 结构体字段上失效,CPtr 等 C 类型类的 __get__ 查找返回 Unknown 而非 undefined,把字段类型(Value.Ty)污染为 Unknown,导致 x.Ty.Pointee 无法解析。 - typeEvaluator: applyDescriptorAccessMethod 的 isAnyOrUnknown 分支在 Viper 方言下返回 memberType 保留原始字段类型;新增 REnum 变体字段查找辅助(getViperREnumVariantFieldInfo)覆盖诊断与符号查找 - semanticTokenProvider: 空 declInfo 成员访问时用 getTypeOfExpression 求值,非 Unknown/Unbound 渲染为 property
Static Type Checker for Viper
Vipeye is a full-featured, standards-based static type checker for Viper, written in TypeScript. It is designed for high performance and can be used with large Viper source bases.
Vipeye includes both a command-line tool and an extension for Visual Studio Code. It is built on the Pyright codebase, adapted from the ground up to Viper semantics (AOT compilation, C-style types, pointer and memory semantics), and no longer type-checks Python.
Packages
packages/vipeye-internal— Core analysis engine: parser, binder, type evaluator, checker, and language service. All logic lives here.packages/vipeye— CLI wrapper. Bundlesvipeye-internalinto a distributable npm package withvipeyeandvipeye-langserverentry points.packages/vipeye-typeserver— Type server process for long-running editor sessions.packages/vscode-vipeye— VS Code extension client (Vipeye LSP), with the Viper core source (packages/viper) bundled at build time.packages/viper— Viper core source library: project (.vpj) management, toolchain, and the activity bar UI (Project / Toolchain / Settings).
Key Differences from Pyright
- Viper dialect:
viperconfig.jsoninstead ofpyrightconfig.json; config namespaceviper.*. - Viper stdlib stubs bundled in
vipeye-internal/vipershed-fallback. - Type semantics follow Viper rules: implicit conversions, pointer (
CPtr/CArray),t.CTypedef/t.CDefine/t.CEnum,T | t.CPtrpointer folding, global-variable access rules, and more. - Semantic highlighting and diagnostics are tailored to Viper syntax.
Building and Testing
See docs/build-debug.md.
Documentation
Refer to the documentation for installation, configuration, and usage details.
Environment variables
If Vipeye fails to create a temporary directory (for example in remote/server environments where the OS temp directory doesn't exist or isn't writable), you can override the temp directory root:
VIPEYE_TMPDIR: Absolute path to a directory that Vipeye can use for temporary files/directories. Vipeye will create it if needed.
Vipeye otherwise relies on the platform temp directory (for example TMPDIR, TMP, TEMP, or the OS default).
License
MIT
