HJLebbink/asm-dude
Visual Studio extension for assembly syntax highlighting and code completion in assembly files and the disassembly window
Healthy across all four use cases
Permissive license, no critical CVEs, actively maintained — safe to depend on.
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓Last commit 4w ago
- ✓6 active contributors
- ✓MIT licensed
Show 3 more →Show less
- ✓Tests present
- ⚠Single-maintainer risk — top contributor 84% of recent commits
- ⚠No CI workflows detected
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Healthy" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/hjlebbink/asm-dude)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/hjlebbink/asm-dude on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: HJLebbink/asm-dude
Generated by RepoPilot · 2026-05-10 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/HJLebbink/asm-dude shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
GO — Healthy across all four use cases
- Last commit 4w ago
- 6 active contributors
- MIT licensed
- Tests present
- ⚠ Single-maintainer risk — top contributor 84% of recent commits
- ⚠ No CI workflows detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live HJLebbink/asm-dude
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/HJLebbink/asm-dude.
What it runs against: a local clone of HJLebbink/asm-dude — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in HJLebbink/asm-dude | Confirms the artifact applies here, not a fork |
| 2 | License is still MIT | Catches relicense before you depend on it |
| 3 | Default branch master exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit ≤ 56 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of HJLebbink/asm-dude. If you don't
# have one yet, run these first:
#
# git clone https://github.com/HJLebbink/asm-dude.git
# cd asm-dude
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of HJLebbink/asm-dude and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "HJLebbink/asm-dude(\\.git)?\\b" \\
&& ok "origin remote is HJLebbink/asm-dude" \\
|| miss "origin remote is not HJLebbink/asm-dude (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(MIT)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"MIT\"" package.json 2>/dev/null) \\
&& ok "license is MIT" \\
|| miss "license drift — was MIT at generation time"
# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
&& ok "default branch master exists" \\
|| miss "default branch master no longer exists"
# 4. Critical files exist
test -f "VS/CSHARP/asm-dude-vsix/AsmDudePackage.cs" \\
&& ok "VS/CSHARP/asm-dude-vsix/AsmDudePackage.cs" \\
|| miss "missing critical file: VS/CSHARP/asm-dude-vsix/AsmDudePackage.cs"
test -f "VS/CSHARP/asm-dude-vsix/Resources/AsmDudeData.xml" \\
&& ok "VS/CSHARP/asm-dude-vsix/Resources/AsmDudeData.xml" \\
|| miss "missing critical file: VS/CSHARP/asm-dude-vsix/Resources/AsmDudeData.xml"
test -f "VS/CSHARP/asm-dude-vsix/CodeCompletion/CodeCompletionSource.cs" \\
&& ok "VS/CSHARP/asm-dude-vsix/CodeCompletion/CodeCompletionSource.cs" \\
|| miss "missing critical file: VS/CSHARP/asm-dude-vsix/CodeCompletion/CodeCompletionSource.cs"
test -f "VS/CSHARP/asm-dude-vsix/QuickInfo/AsmQuickInfoSource.cs" \\
&& ok "VS/CSHARP/asm-dude-vsix/QuickInfo/AsmQuickInfoSource.cs" \\
|| miss "missing critical file: VS/CSHARP/asm-dude-vsix/QuickInfo/AsmQuickInfoSource.cs"
test -f "VS/CSHARP/asm-dude-vsix/BraceMatching/BraceMatchingTagger.cs" \\
&& ok "VS/CSHARP/asm-dude-vsix/BraceMatching/BraceMatchingTagger.cs" \\
|| miss "missing critical file: VS/CSHARP/asm-dude-vsix/BraceMatching/BraceMatchingTagger.cs"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 56 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~26d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/HJLebbink/asm-dude"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
AsmDude2 is a Visual Studio 2022 extension built on the Language Server Protocol (LSP) that provides real-time syntax highlighting, code completion, and hover documentation for x86/x64 assembly code. It supports Intel, SSE, AVX, AVX-512 instruction sets and both MASM and NASM assembly dialects, enabling developers to write assembly with IDE-level intellisense directly in VS2022's editor and disassembly window. Monorepo structure: VS/CSHARP/asm-dude-vsix/ contains the core VSIX extension (entry point AsmDudePackage.cs), with subsystems for AsmDoc (hover/documentation), BraceMatching, and ClassificationFormats. Go/LoadIntelDoc/ is a standalone tool that scrapes Intel documentation. VS/CPP/ contains C++ test harnesses. Data files (AsmDudeData.xml, CSV instruction tables) live alongside binaries post-installation.
👥Who it's for
Low-level systems programmers, reverse engineers, and compiler developers who write or read assembly code in Visual Studio 2022 and need instant instruction reference, syntax validation, and code completion without leaving the editor.
🌱Maturity & risk
The project is actively maintained and production-ready for VS2022 (currently at v2.0.0.4), though it represents a partial migration from the older AsmDude plugin for VS2015-2019. The README explicitly notes that some features from the predecessor have yet to be ported. The codebase is substantial (~2.9M lines of C#) and distributed via the official Visual Studio Marketplace, indicating stable release cycles.
Single-maintainer project (HJLebbink) with no visible CI/CD pipeline setup in the file list and no automated test infrastructure mentioned. The migration from VS2019 to VS2022 LSP architecture is still incomplete—some legacy features remain unported. Dependency on Intel's instruction set documentation (Go/LoadIntelDoc tool) requires periodic manual updates, creating maintenance burden.
Active areas of work
The project is transitioning from a monolithic VS2015-2019 extension to a modular LSP-based VS2022 architecture. Recent focus appears to be on completing feature parity (code completion, signature help, and hover descriptions are implemented; some visualization and analysis features remain on the TODO list). The Go tooling suggests ongoing work on parsing and validating Intel instruction set data.
🚀Get running
Clone the repo: git clone https://github.com/HJLebbink/asm-dude.git. Open VS/AsmDude.sln in Visual Studio 2022 with C# and VSIX development workloads installed. Build the solution (F6 or Build menu). Run the VSIX project to launch an experimental VS instance with the extension active. Install Go (https://golang.org/) if you plan to update instruction set data via Go/LoadIntelDoc/Main.go.
Daily commands: In Visual Studio 2022: right-click the asm-dude-vsix project → 'Set as StartUp Project', then press F5 to launch the experimental instance with the extension loaded. The extension activates when you open .asm files or the disassembly window.
🗺️Map of the codebase
VS/CSHARP/asm-dude-vsix/AsmDudePackage.cs— Main VSPackage entry point that initializes the Visual Studio extension and coordinates all major subsystems like syntax highlighting, code completion, and quick info.VS/CSHARP/asm-dude-vsix/Resources/AsmDudeData.xml— Central data source containing all assembly instruction definitions, register information, and syntax rules that drive syntax highlighting and code completion.VS/CSHARP/asm-dude-vsix/CodeCompletion/CodeCompletionSource.cs— Implements IntelliSense-style code completion for assembly instructions and operands; must be understood to extend completion behavior.VS/CSHARP/asm-dude-vsix/QuickInfo/AsmQuickInfoSource.cs— Generates hover tooltips and documentation for instructions and registers; core to the quick-info feature.VS/CSHARP/asm-dude-vsix/BraceMatching/BraceMatchingTagger.cs— Provides brace and bracket matching highlighting; demonstrates the tagger/classifier pattern used throughout the codebase.VS/CSHARP/asm-dude-vsix/AsmDoc/AsmDocUnderlineTagger.cs— Implements Ctrl+click navigation and underline hints for instruction/register links; critical for documentation lookup feature.VS/CSHARP/asm-dude-vsix/CodeFolding/CodeFoldingTagger.cs— Provides code folding regions for assembly blocks; illustrates how to extend editor behavior with tagging providers.
🛠️How to make changes
Add a new assembly instruction to the database
- Open VS/CSHARP/asm-dude-vsix/Resources/AsmDudeData.xml and locate the appropriate instruction section (e.g., <instruction mnemonic="ADD">) (
VS/CSHARP/asm-dude-vsix/Resources/AsmDudeData.xml) - Add a new <instruction> element with mnemonic, description, operand signatures, and CPU feature flags (e.g., sse, avx, avx2) (
VS/CSHARP/asm-dude-vsix/Resources/AsmDudeData.xml) - The instruction will automatically appear in CodeCompletionSource.cs (via XML parsing) and AsmQuickInfoSource.cs (for hover tooltips) (
VS/CSHARP/asm-dude-vsix/CodeCompletion/CodeCompletionSource.cs) - Test by hovering or typing the instruction in an .asm file; no code changes needed (
VS/CSHARP/asm-dude-vsix/AsmDudePackage.cs)
Add a new color classification for syntax highlighting
- Define a new classification constant in VS/CSHARP/asm-dude-vsix/AsmDoc/AsmDocClassificationDefinition.cs (e.g., public static readonly string RegisterClass = "asm.register") (
VS/CSHARP/asm-dude-vsix/AsmDoc/AsmDocClassificationDefinition.cs) - Add a corresponding color format mapping in VS/CSHARP/asm-dude-vsix/AsmDoc/AsmDocClassificationFormat.cs with desired color and style (
VS/CSHARP/asm-dude-vsix/AsmDoc/AsmDocClassificationFormat.cs) - Reference the new classification in the relevant tagger (e.g., BraceMatchingTagger.cs or AsmDocUnderlineTagger.cs) when applying spans (
VS/CSHARP/asm-dude-vsix/BraceMatching/BraceMatchingTagger.cs) - Build the VSIX and test in an assembly file to verify color rendering (
VS/CSHARP/asm-dude-vsix/AsmDudePackage.cs)
Add a new quick-info provider for a custom element type
- Create a new class in a subfolder under VS/CSHARP/asm-dude-vsix/QuickInfo/ (e.g., DirectiveQuickInfo.cs) implementing logic to detect and format your element (
VS/CSHARP/asm-dude-vsix/QuickInfo/AsmQuickInfoSource.cs) - Modify AsmQuickInfoSource.cs to check for your element type and call your new provider in the GetQuickInfoAsync method (
VS/CSHARP/asm-dude-vsix/QuickInfo/AsmQuickInfoSource.cs) - Optionally create a custom XAML template (e.g., DirectiveTooltipWindow.xaml) if you need custom UI layout beyond simple text (
VS/CSHARP/asm-dude-vsix/QuickInfo/InstructionTooltipWindow.xaml) - Test by hovering over instances of your element type in an .asm file (
VS/CSHARP/asm-dude-vsix/AsmDudePackage.cs)
Add performance/latency data for a new microarchitecture
- Create a new .tsv file in VS/CSHARP/
🪤Traps & gotchas
MEF composition cache: Visual Studio caches MEF components; if changes to ClassificationDefinition or TaggerProvider don't appear, manually delete %APPDATA%/Microsoft/VisualStudio/17.0_<hash>/ComponentModelCache before rebuilding. Instruction data freshness: AsmDudeData.xml and CSV files must be manually regenerated via Go/LoadIntelDoc when Intel releases new instruction sets; no automated update mechanism exists. LSP server location: After installing the .vsix from Marketplace, the server binary lives in a version-specific extensions folder (e.g., C:\Users<user>\AppData\Local\Microsoft\VisualStudio\17.0\Extensions...); this path is not configurable. x64-only: The project targets x64; no x86 plugin variant is built. Disassembly window limitation: Support for the VS disassembly window requires special integration; not all editor features apply there.
💡Concepts to learn
- Language Server Protocol (LSP) — AsmDude2 is built on LSP, decoupling the extension from Visual Studio internals; understanding LSP architecture is essential to adding features like semantic analysis or go-to-definition.
- MEF (Managed Extensibility Framework) — The VS editor uses MEF for composing syntax classifiers, taggers, and command handlers; you must use MEF attributes ([Export], [ContentType]) to register new features.
- Syntax Classification & ITagger<T> — Core VS extensibility pattern: taggers emit semantic metadata (classification, underline, tooltip spans) across text buffers; AsmDocUnderlineTagger and AsmDocClassificationDefinition implement these to colorize and annotate code.
- x86-64 Instruction Set Architecture (ISA) & Operand Encoding — Assembly mnemonics must be correctly mapped to their operand types (register, immediate, memory); the Go/LoadIntelDoc tool and ParserXed.cs rely on understanding x86-64 encoding rules to validate and describe instructions.
- TextMate Grammar & Syntax Tokenization — The classifier uses grammar-like rules to tokenize assembly source (mnemonics, operands, comments); understanding regex-based syntax trees helps extend highlighting to new dialects (e.g., Yasm, GAS).
- Instruction Latency & Throughput (Performance Analysis) — The asm-annotate tool and CSV data files (e.g., icelake.csv) encode CPU performance metrics; these inform code completion suggestions and hover annotations for optimization-conscious developers.
- VSIX Package Format & Visual Studio Marketplace Distribution — The extension is packaged as a .vsix file and published to the VS Marketplace; understanding VSIX manifest (extension.vsixmanifest) and signing is necessary for releases and CI/CD.
🔗Related repos
x64dbg/x64dbg— Debugger with integrated disassembly window; shares the challenge of real-time assembly syntax highlighting and instruction lookup.keystone-engine/keystone— Lightweight assembly language engine for multiple architectures; AsmDude could leverage its parser instead of maintaining its own instruction set data.intel/XED— Intel's official instruction encoder/decoder; Go/LoadIntelDoc indirectly depends on XED documentation; could be a direct data source.microsoft/TypeScript-TmLanguage— TextMate grammar framework used by VS Code; AsmDude could adopt TextMate assembly grammar for better cross-IDE compatibility.HJLebbink/asm-dude— The original AsmDude extension for VS2015-2019; predecessor to this repo, archived but useful as a reference for legacy features.
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add unit tests for CodeCompletion module (CodeCompletionSource.cs)
The CodeCompletion directory contains critical components (CodeCompletionSource.cs, CodeCompletionCommandFilter.cs, CodeCompletionSourceProvider.cs) but there's no evidence of unit tests in the repo structure. This is a core feature of the extension, so adding tests would ensure robustness and help future contributors avoid regressions.
- [ ] Create VS/CSHARP/asm-dude-vsix.Tests/CodeCompletion directory with test project
- [ ] Add unit tests for CodeCompletionSource.cs covering completion item generation for assembly mnemonics
- [ ] Add tests for CodeCompletionCommandFilter.cs to verify command interception and filtering logic
- [ ] Integrate tests into AsmDude.sln and establish CI workflow to run on PR
Add integration tests for syntax highlighting classification (AsmDocClassificationFormat.cs)
The AsmDoc directory implements syntax highlighting with AsmDocClassificationFormat.cs and AsmDocClassificationDefinition.cs, but there are no visible tests validating that assembly instructions are correctly classified and highlighted. This is a primary user-facing feature.
- [ ] Create test files in VS/CSHARP/asm-dude-vsix.Tests/AsmDoc with sample .asm assembly files
- [ ] Write tests verifying that mnemonics, registers, and operands receive correct classification tags
- [ ] Test against multiple instruction sets (x86, x64) to ensure comprehensive coverage
- [ ] Add tests to validate that the classification colors/formats render correctly in the editor
Document LSP server implementation and architecture in CLAUDE.md
The README mentions the transition from AsmDude to AsmDude2 built on LSP, but CLAUDE.md and README.md lack specific documentation about the LSP server implementation, how it communicates with the VS2022 extension, and how contributors should modify it. The Go/LoadIntelDoc suggests there's custom tooling, but this isn't documented.
- [ ] Expand CLAUDE.md with a section explaining the LSP architecture and where the language server code resides
- [ ] Document the purpose of Go/LoadIntelDoc/Main.go and how it integrates with the main extension
- [ ] Add a setup guide explaining how to build and test the LSP server alongside the VS2022 extension
- [ ] Include a diagram or flowchart showing communication between VS2022 extension and LSP server
🌿Good first issues
- Add unit tests for ParserXed.cs instruction parsing (currently no test coverage visible). Create a test file with 20 common x86-64 instructions and assert correct operand extraction.
- Enhance AsmDudeData.xml documentation format to support Markdown (README mentions this is a known limitation). Modify AsmDocUnderlineTagger to render Markdown hover tooltips, starting with bold/italic formatting.
- Update the Go/LoadIntelDoc tool to auto-detect when Intel's XED or official instruction reference is newer and generate a diff report. This reduces manual versioning overhead.
⭐Top contributors
Click to expand
Top contributors
- @HJLebbink — 84 commits
- @henkjan-sneller — 12 commits
- @NN--- — 1 commits
- @Jocagi — 1 commits
- @KeRNeLith — 1 commits
📝Recent commits
Click to expand
Recent commits
93b5669— added CLAUDE.md (HJLebbink)9e1ab93— test to fix the NamedPipeServerStream UnauthorizedAccessAcception (HJLebbink)2b08ac0— bugfix: unable to communicate with LSP on Windows 10 (#155) (HJLebbink)095211d— bumped Microsoft.VisualStudio.LanguageServer.Protocol 17.2.8 -> 18.8.9-preview (HJLebbink)2b897a0— update tests, versions updated (HJLebbink)b3b9046— cleanup asm-sim (HJLebbink)3f13c63— update unit tests for asm-tools (HJLebbink)72cf17e— fix of intel-doc-2-data (HJLebbink)16b547c— Update README.md (HJLebbink)778b64e— removed support for pre VS2022 (HJLebbink)
🔒Security observations
The AsmDude2 codebase is a Visual Studio extension for assembly language processing. The primary security concerns relate to the processing of untrusted assembly code and external data sources (CSV, PDF files) without visible input validation. The presence of a signing key in version control is a low-risk issue that should be remediated. No SQL injection or XSS risks were identified based on the file structure. No Docker infrastructure issues are present. Overall security posture is moderate; the main recommendations are to implement robust input validation for assembly code and external data processing, and to move sensitive keys to secure management systems.
- Medium · Potential Unvalidated External Data Processing —
Go/LoadIntelDoc/Main.go and VS/CSHARP/asm-annotate/ParserXed.cs. The Go application in LoadIntelDoc/Main.go processes Intel documentation files (CSV data from icelake.csv and PDF files). Without visibility into the parsing logic, there's a risk of unvalidated external data being processed, particularly CSV parsing which could be vulnerable to injection or malformed data attacks. Fix: Implement strict input validation and sanitization for all external data sources (CSV, PDF). Use safe parsing libraries and validate data schemas before processing. - Medium · Assembly/Binary Extension Loading Risk —
VS/CSHARP/asm-dude-vsix/AsmDudePackage.cs and related extension files. The Visual Studio extension loads assembly code and processes disassembly windows. Extensions with elevated privileges that process untrusted assembly code could be exploited to execute arbitrary operations or expose sensitive system information. Fix: Implement sandboxing for assembly parsing. Validate and sanitize all assembly code inputs. Run security audits on the parser implementation. - Low · Signed Assembly Key Management —
VS/CSHARP/asm-dude-vsix/Key.snk. A strong name key file (Key.snk) is present in the repository at VS/CSHARP/asm-dude-vsix/Key.snk. While necessary for Visual Studio extensions, version control of signing keys can be a security concern. Fix: Verify this key is not used in production environments. Consider rotating the signing key if it has been exposed. Store signing keys in secure key management systems, not in version control. - Low · Missing Dependency Manifest —
Package dependencies (not provided). The provided dependency information is empty. Cannot verify that all third-party dependencies are up-to-date and free from known vulnerabilities. Fix: Implement dependency scanning tools (e.g., OWASP Dependency-Check, Snyk, GitHub Dependabot) in the CI/CD pipeline. Maintain an updated list of all dependencies and their versions. - Low · Potential Hardcoded Data Paths —
VS/CSHARP/asm-annotate/data/ directory. The codebase references embedded data files and PDFs (e.g., 'data/10th generation Intel Core Processor based on Ice Lake microarchitecture Throughput and Latency README.pdf'). Hardcoded paths could pose security risks if they're accessible or modifiable. Fix: Validate all file paths at runtime. Implement proper access controls and integrity checks for embedded data files. Consider using configuration-driven paths instead of hardcoded values.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.