# core/plugins/syntax.registrar.plugin.ts

> 28 lines of code and 11 definitions.

Tree: GovLab Docs
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/docs#file-docs-core-plugins-syntax-registrar-plugin-ts
Source text: https://banes-lab.com/source/docs/core/plugins/syntax.registrar.plugin.ts.txt

Listed in [core/plugins](https://banes-lab.com/api/source/docs/core/plugins.md), after [core/plugins/syntax.field.plugin.ts](https://banes-lab.com/source/docs/core/plugins/syntax.field.plugin.ts.md) and before [core/plugins/syntax.release.plugin.ts](https://banes-lab.com/source/docs/core/plugins/syntax.release.plugin.ts.md).

## Definitions

- `isDefineName` (lexical_declaration, line 9)
- `labelOf` (lexical_declaration, line 13)
- `DEFINE` (lexical_declaration, line 4)
- `SET_METHOD` (lexical_declaration, line 5)
- `SET_SUFFIX` (lexical_declaration, line 6)
- `DEFAULT_SET_LABEL` (lexical_declaration, line 7)
- `callee` (lexical_declaration, line 14)
- `recognizer` (lexical_declaration, line 21, exported)
- `classify` (method_definition, line 22, exported)
- `registered` (lexical_declaration, line 23, exported)
- `id` (lexical_declaration, line 27, exported)

## Contained in

- [core/plugins](https://banes-lab.com/anatomy/docs/folder-docs-core-plugins.md)

## Linked from

- [core/plugins](https://banes-lab.com/anatomy/docs/folder-docs-core-plugins.md)

## Source

```typescript
import type { Recognizer } from "#types/code.types";
import ts from "typescript";

const DEFINE = "define";
const SET_METHOD = "set";
const SET_SUFFIX = ".set";
const DEFAULT_SET_LABEL = "registry.set";

const isDefineName = function isDefineName(name: string): boolean {
    return name.startsWith(DEFINE) && name.length > DEFINE.length;
};

const labelOf = function labelOf(node: ts.CallExpression): string | null {
    const callee = node.expression;
    if (ts.isPropertyAccessExpression(callee) && callee.name.text === SET_METHOD) {
        return ts.isIdentifier(callee.expression) ? `${callee.expression.text}${SET_SUFFIX}` : DEFAULT_SET_LABEL;
    }
    return ts.isIdentifier(callee) && isDefineName(callee.text) ? callee.text : null;
};

export const recognizer: Recognizer = {
    classify(node, context) {
        const registered = ts.isCallExpression(node) ? labelOf(node) : null;
        if (registered === null) {
            return null;
        }
        const id = context.mkNodeId(node);
        return { edges: [], nodes: [{ id, kind: "registry", label: registered, source: context.sourceOf(node) }] };
    },
    emits: { edges: [], nodes: ["registry"] },
    name: "registry-define",
};
```
