Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>clang extern rw mapNew to Visual Studio Code? Get it now.
clang extern rw map

clang extern rw map

noname

|
2 installs
| (0) | Free
Shows, for an extern variable, which files write it and which files read it, as an arrow diagram plus a jump-to line list.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

clang extern rw map

Shows, for an extern variable in a C project, which files write it and which files read it — as an arrow diagram plus a list of file:line rows you can click to jump to.

Built for embedded C projects (for example Renesas RL78). Parsing uses tree-sitter; no compiler or preprocessor is run.

What it does

  • Pick an extern variable: the panel draws writer files → variable → reader files.
  • Below the diagram, each access is listed as a file:line row. Click a row to open that line.
  • Press ↑ / ↓ in the panel to switch to the previous / next variable.

How to use

  1. Open a C file (.c or .h).
  2. Run Clang Extern RW Map: Open Extern Read/Write Map (command id clangExternRwMap.open) from the Command Palette, or press Ctrl+Alt+Shift+M.
  3. Select a variable in the panel.

Scan scope

  • Files: **/*.c and **/*.h in the workspace.
  • Never scanned (fixed list, not configurable): folders named node_modules, .git, DefaultBuild, Debug, Release, build, out — at any depth, in any case. Files inside them are not counted in the panel status. The file iodefine.h (any case) is also skipped.
  • Your files.exclude and search.exclude settings also hide files: only keys set to true are used, and keys containing {, } or , are ignored.
  • Files larger than 500 KiB (512,000 bytes) are skipped; a file of exactly 512,000 bytes is still indexed.
  • At most 3000 files are indexed: the first 3000 in path order. The panel status shows how many files were skipped.
  • Unsaved editor changes are not used. Save the file to update the panel.

Known limitations

  • Macros: macro bodies are not scanned and no preprocessing is done. An access that only appears after macro expansion is not detected.
  • Conditional code: rows inside #if / #ifdef / #else arms get the note in #if. A whole-file include guard (#ifndef NAME followed by #define NAME) does not add the note.
  • Syntax errors: a file with syntax errors is still analyzed and shows a warning; declarations damaged by the error are skipped.
  • Inline assembly: text between #pragma asm and #pragma endasm is not analyzed. A #pragma asm inside a comment or string is ignored.
  • Encoding: a Shift-JIS file that VS Code decodes as UTF-8 may show a wrong line and gets no badge; the only notice is a line in the Output channel.
  • Duplicate files: a junction or symlink pointing back into the workspace, or two workspace roots with the same folder name, can list a file twice.
  • Large binary files: a large non-text file named .c (for example ~500 KB of random bytes) can take about 15 seconds to analyze, because the parser's error recovery is slow; the extension host is busy meanwhile.
  • Pointers: pointer aliases are not tracked, and there is no type inference. int *q = &g; *q = 1; does not count as a write to g. *p = v and p->x = v count as a read of p with the note pointee written; this also works through a cast (((struct S *)p)->x = v), but not through pointer arithmetic ((p + i)->x = v).
  • Compound updates: +=, ++, -- (and similar) count as read-write: one row with an RW badge, shown on the writer side.
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft