个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Fast, accurate C/C++ code navigation for VS Code: call graph, callers/callees through macros and function pointers, symbol search, #if-aware indexing without a build or compile_commands.json. Indexes the Linux kernel in about a minute. Also a CLI and language server.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Language servers built on a compiler, such as clangd, need to know exactly how
every file is compiled. A great deal of real C cannot tell them: firmware built
with a proprietary toolchain, SDKs with a header per chip, vendor trees that only
build on one machine, code too large or too old to have a working compilation
database. Text indexers such as ctags and cscope work anywhere, but they find
names, not calls, and they cannot tell which #if branch is compiled.
Norn reads the sources the way a person would, and the build's own description where there is one:
compile_commands.json files and works out which #if branches are compiled.| Norn | clangd | ctags / cscope / GNU Global | |
|---|---|---|---|
| Works without a compilation database | ✅ | ⚠️ less accurate | ✅ |
Knows which #if branches the build compiles | ✅ | ✅ with a database | ❌ |
| Call graph (callers and callees) | ✅ | ✅ | ⚠️ cscope, by name |
| Calls through function pointers | ✅ | ❌ | ❌ |
| Calls generated by macros | ✅ | ✅ with a database | ❌ |
| Index updated as you save | ✅ | ✅ | ❌ re-run |
| Source Insight-style views (Relation, Context) | ✅ | ❌ | ❌ |
Measured on public projects against clang's own view of a real build of each.
Each tool's cold index of the whole project is timed, and every call it reports
is checked against the call clang compiles. clangd is measured twice: given each
build's own compilation database (clangd at its best, the reference for an index
that is told exactly how every file is compiled) and given none, as a project
without a working compile_commands.json leaves it. Norn is given nothing. ctags, cscope and GNU Global
index fastest because they record names and places, not a call graph.
| Project | Language | Files | Norn | clangd + build database | clangd | codebase-memory-mcp | cscope | GNU Global | Universal Ctags |
|---|---|---|---|---|---|---|---|---|---|
| Redis | C | 801 | 100.0%0.33 s | 100.0%2.71 s | 95.8%15 s | 97.1%15 s | 96.9%0.28 s | n/a0.20 s | n/a0.18 s |
| git | C | 919 | 99.9%0.26 s | 99.9%2.42 s | 64.2%34 s | 85.9%12 s | 87.9%0.28 s | n/a0.21 s | n/a0.17 s |
| binutils | C | 1,622 | 99.6%2.56 s | 92.7%9.65 s | 32.3%22 s | 81.0%38 s | 70.6%1.40 s | n/a0.87 s | n/a1.03 s |
| STM32F4 HAL | C | 253 | 96.5%0.67 s | 95.0%2.82 s | 0.0%1.86 s | 85.8%10 s | 75.7%0.46 s | n/a0.72 s | n/a0.63 s |
| nrfx | C | 535 | 99.4%0.58 s | 100.0%1.12 s | 14.1%1.59 s | 94.2%8.65 s | 12.0%0.31 s | n/a0.41 s | n/a0.36 s |
| curl | C | 1,067 | 89.6%0.34 s | 100.0%1.12 s |
Each cell: the share of calls found (checked against clang), and below it the time to index.
clangd on binutils, STM32F4 HAL, nrfx, curl, Mbed TLS, FreeRTOS, lwIP, U-Boot, Linux, LevelDB, Bitcoin Core, Ninja, GoogleTest, Abseil, yaml-cpp, spdlog: given no include paths and no -D, as a project without a compilation database would, most of the code that needs the build's include paths or definitions does not parse for it. With a real build's database it does far better; that is not what is measured here.
How the numbers are made, every figure for every project, and the versions of
the tools: docs/benchmarks. Every number there is
produced by bench/compare.py; none is typed in. To measure it
again from nothing, on EC2 or any Ubuntu 24.04: bench/ec2.
Norn is a complete language server: Go to Definition, Find References, Call Hierarchy, signature help, rename, folding, formatting and quick fixes too. Alongside Microsoft's C/C++ extension it becomes IntelliSense's configuration provider instead of competing with it. The full list is on the extension's page.
.vsix from the
releases. From the command
line: code --install-extension humphrey0925.norn-c.That is all. The server is included for Windows, Linux and macOS, on x64 and Arm64. The user guide covers every view and setting.
Without VS Code, the same indexer is a command of its own, norn, for the
terminal, scripts, CI, other editors (as a language server) and AI agents
such as Claude Code, Codex, OpenCode and Copilot (as an MCP server, norn mcp;
norn setup sets the agents up, Norn for AI agents says how): see
the command line.
sources ─► tree-sitter parse ─► facts per file ─► link ─► call graph (CSR) ─► language server
▲ ▲
#if worked out from the build's calls through macros and
own configuration and the sources function pointers resolved
Norn is written in Rust. Each file is parsed once with tree-sitter after its preprocessor conditions are worked out, from the build's configuration and from what the sources themselves define. The facts of each file are cached by content hash, and a folder opened inside or around one already indexed takes those facts for every file it reads the same way; linking them into a call graph takes milliseconds, so saving a file updates the index almost at once. The graph is kept in compressed sparse rows, which answer a callers query in well under a microsecond.
Requires Rust (stable) and Node.js 20.
cargo build --release
cd vscode && npm ci && npm run compile
| Path | |
|---|---|
crates/si-core | The index: parsing, preprocessor conditions, linking, the stored graph |
crates/si-cli | The norn executable: norn lsp (the language server), norn mcp (for AI agents), norn index, norn query |
vscode | The VS Code extension |
bench | Accuracy and speed measurements against clang and other indexers |
Releases are built and tested on Windows, Linux and macOS by GitHub Actions; see docs/releasing.md.
Issues and pull requests are welcome; see CONTRIBUTING.md. Contributions are accepted under the Contributor License Agreement, which the CLA check asks you to sign on your first pull request.
Copyright 2026 humphrey0925 and the Norn contributors. Licensed under the Apache License, Version 2.0.
Source Insight is a trademark of Source Dynamics, Inc. Norn is not affiliated with, or endorsed by, Source Dynamics; the name is used only to describe the style of navigation. Other names are trademarks of their owners.
| 45.4%22 s |
| 78.5%9.74 s |
| 78.7%0.20 s |
| n/a0.15 s |
| n/a0.12 s |
| SQLite | C | 360 | 93.9%0.26 s | 99.2%0.64 s | 74.5%15 s | 90.8%12 s | 83.6%0.29 s | n/a0.19 s | n/a0.19 s |
| Mbed TLS | C | 131 | 89.8%0.11 s | 99.3%0.40 s | 0.0%1.54 s | 68.1%5.43 s | 69.0%0.06 s | n/a0.05 s | n/a0.04 s |
| FreeRTOS | C | 655 | 98.6%0.34 s | 100.0%0.11 s | 9.1%5.57 s | 48.1%9.17 s | 50.6%0.21 s | n/a0.18 s | n/a0.19 s |
| lwIP | C | 480 | 80.5%0.16 s | 96.6%0.48 s | 0.8%4.44 s | 68.8%6.20 s | 75.1%0.11 s | n/a0.09 s | n/a0.07 s |
| U-Boot | C | 13,352 | 94.9%5.54 s | 96.4%4.09 s | 19.9%150 s | 65.5%65 s | 76.2%3.22 s | n/a1.98 s | n/a2.02 s |
| Linux | C | 64,574 | 91.1%64 s | 99.6%113 s | 18.8%1026 s | – | 63.9%56 s | n/a23 s | n/a26 s |
| fmt | C++ | 72 | 89.9%0.20 s | 91.6%3.88 s | 68.1%13 s | 9.2%6.24 s | 4.8%0.06 s | n/a0.04 s | n/a0.04 s |
| LevelDB | C++ | 366 | 96.1%0.27 s | 98.8%2.45 s | 6.3%17 s | 9.2%7.52 s | 4.3%0.09 s | n/a0.08 s | n/a0.07 s |
| Bitcoin Core | C++ | 1,498 | 94.0%3.62 s | 86.8%72 s | 15.2%45 s | 12.3%18 s | 25.9%0.43 s | n/a0.42 s | n/a0.27 s |
| Ninja | C++ | 258 | 99.1%0.31 s | 100.0%2.47 s | 40.7%26 s | 7.6%6.79 s | 15.1%0.08 s | n/a0.07 s | n/a0.06 s |
| GoogleTest | C++ | 155 | 85.3%0.31 s | 92.0%6.92 s | 5.3%10 s | 6.3%5.99 s | 4.1%0.07 s | n/a0.07 s | n/a0.05 s |
| Abseil | C++ | 837 | 78.8%0.28 s | 96.3%22 s | 10.8%27 s | 5.7%8.61 s | 0.8%0.18 s | n/a0.13 s | n/a0.13 s |
| yaml-cpp | C++ | 259 | 86.7%0.36 s | 99.0%2.51 s | 22.4%12 s | 9.2%6.44 s | 2.5%0.08 s | n/a0.06 s | n/a0.06 s |
| spdlog | C++ | 542 | 77.1%0.36 s | 92.3%4.14 s | 2.5%17 s | 4.3%7.30 s | 1.3%0.08 s | n/a0.08 s | n/a0.07 s |
| Cppcheck | C++ | 554 | 84.3%0.29 s | 99.7%8.33 s | 83.4%47 s | 3.3%19 s | 49.7%0.21 s | n/a0.15 s | n/a0.14 s |