
m-function-matcher
PluginThis plugin enables Sherlock (VS Code extension) to recognize m.message() function calls used by Paraglide JS.
What it does
- Inline previews: See translations directly in your code editor
- Message extraction: Extract hardcoded strings into messages
- Linting: Get warnings for missing or invalid message references
Supported file types
- TypeScript (
.ts,.tsx) - JavaScript (
.js,.jsx) - Svelte (
.svelte) - Vue (
.vue) - Astro (
.astro)
Installation
Add the plugin to your project.inlang/settings.json:
{
"modules": [
"https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@latest/dist/index.js"
]
}
Then install Sherlock from the VS Code marketplace.
Matched patterns
The plugin recognizes these patterns:
| Pattern | Example |
|---|---|
| Simple call | m.welcome() |
| With variables | m.greeting({ name: "World" }) |
| In JSX | {m.button_label()} |
Project checks
Find unused messages with the inlang CLI:
npx @inlang/cli check --project ./project.inlang --unused-messages
The plugin exposes analyzeUsage for the SDK's checkProject({ project, files }) API. ESM JavaScript/TypeScript, Svelte and Astro analysis recognizes static message reads, function references, named imports and namespace imports. Dynamic accesses, namespace escapes, parse failures and unsupported formats report incomplete analysis, which withholds unused-message findings and deletion fixes. Each issue names the file and, where possible, the location (start/end) of the construct, e.g. m[`${fieldName}_label`].
See the SDK checks and fixes documentation for source snapshot requirements, supported syntax, limits and programmatic usage. This capability is separate from the existing IDE reference matchers.
Bundle size: the analysis bundles Babel's parser and Svelte's compiler, so dist/index.js is about 840 KB minified (28 KB before). It is not lazy-loaded: the SDK imports a plugin module as a single data: URL, where a separately loaded chunk can't be resolved.
Svelte analysis covers instance/module scripts (JavaScript or TypeScript) and template expressions, blocks, snippets, components and directives. Include .svelte files in the full source snapshot; no extra configuration is required. External scripts and unsupported script languages report incomplete analysis.
Astro analysis covers the frontmatter and inline scripts outside expressions (TypeScript) plus every {…} expression in the template and attributes such as title={m.someKey()} or set:html. Backtick attribute interpolations and nested Astro shorthand attributes are supported, including in templates containing HTML comments. Single- and double-quoted attribute values, known data scripts such as JSON-LD, <style> blocks and HTML comments are literal text. Include .astro files in the full source snapshot; no extra configuration is required. External scripts, regardless of src syntax or self-closing form, scripts nested inside expressions, and malformed input report incomplete analysis.
Recommended complementary solutions
inlang CLI
Automate localization tasks in CI/CD pipelines with machine translation, validation, and plugin support for JSON, i18next, next-intl, and more.
Fink - CAT Editor (Computer Assisted Translation Editor)
Manage translations in a web app with Fink.

Sherlock - VS Code extension
Visualize, edit & lint translated strings at a glance via Inline Decorations & Hover Support, and extract new strings with a single click.

Paraglide JS
Simple, adaptable and tiny i18n library that integrates with any framework