Skip to content

Language support

SigMap extracts signatures from 21 programming languages using pure regex — no Tree-sitter, no native binaries. Every extractor is a single JS file. No grammar files to download. Runs deterministically on any machine with Node.js 18+.

Stats: 21 languages · 25 max signatures per file · 0 npm packages · 162 tests passing

How extraction works

Full source code goes in. Only public shapes come out. Bodies, comments, imports, and private members are stripped entirely.

TypeScript example — input (1,240 tokens):

typescript
export interface User {
  id: string;
  email: string;
  createdAt: Date;
}

export class UserService {
  private db: Database;

  async findById(id: string): Promise<User> {
    // implementation...
  }

  async create(dto: CreateDto): Promise<User> { ... }

  private _validate(d: any) { ... }
}

Output (62 tokens) — 95% reduction:

export interface User
export class UserService
  async findById(id: string): Promise<User>
  async create(dto: CreateDto): Promise<User>

# private _validate stripped
# bodies stripped
# comments stripped

What's extracted — and what isn't

Extracted

  • Exported / public classes with public methods
  • Exported / public functions and procedures
  • Exported types, interfaces, and enums
  • Internal classes (unexported, lower priority)
  • Internal functions (unexported, lower priority)
  • Method signatures — name, parameters, return type
  • Generic type parameters and constraints
  • Async / await marker where language supports it

Never extracted

  • Function and method bodies (everything inside {})
  • Comments — //, /*, #, """, ''' in all languages
  • Import and require statements
  • Variable declarations that aren't type definitions
  • Private class members (_prefix, # prefix, private keyword)
  • Test files (*.test.*, *.spec.*, *_test.*)
  • Generated files (*.pb.*, *.generated.*)
  • Any credential, key, token, or secret pattern

All 21 languages

LanguageExtensionsExtracts
TypeScript.ts .tsxexport function, export class, interface, type alias, enum, methods, generics
JavaScript.js .jsx .mjs .cjsexport function, export class, arrow functions, module.exports, methods
Python.py .pywdef functions, class, methods, async def, @dataclass, @property
Java.javapublic class, interface, enum, public methods, annotations
Kotlin.kt .ktsfun, class, data class, interface, object, sealed class
Go.gofunc, type struct, interface, method receivers, type alias
Rust.rspub fn, pub struct, trait, enum, impl methods, pub type
C#.cspublic class, interface, enum, public methods, record, struct
C / C++.c .cpp .h .hpp .ccfunctions, class / struct, public methods, template, typedef
Ruby.rb .rakedef, class, module, attr_accessor, include / extend
PHP.phpfunction, class, interface, trait, public methods
Swift.swiftfunc, class / struct, protocol, enum, extension
Dart.dartclass, void / return type functions, abstract class, mixin, methods
Scala.scala .scdef, class, object, trait, case class, methods
Vue.vuedefineProps, defineEmits, composables, component name, script functions
Svelte.svelteexport let props, export function, script functions, component name
HTML.html .htmpage title, h1–h3 headings, form id/action, script src, link rel
CSS / SCSS / LESS.css .scss .sass .lessCSS variables (--), @mixin, @function, media queries, top-level selectors
YAML.yml .yamltop-level keys, CI job names, K8s kind/name, second-level keys
Shell.sh .bash .zsh .fishfunction names, exported vars, script description
DockerfileDockerfile Dockerfile.*FROM image, EXPOSE ports, ENTRYPOINT, multi-stage names, ARG / ENV keys

Contributing a new language

Adding a language means contributing one extractor file. Follow the extractor contract, ensure all tests pass, and open a PR. See CONTRIBUTING.md for the full guide.


Made in Amsterdam, Netherlands 🇳🇱

MIT License