# core/selectors/syntax.selector.ts

> 20 lines of code and 7 definitions.

Tree: GovLab Patterns
Language: typescript
Layer: application
Canonical: https://banes-lab.com/anatomy/patterns#file-patterns-core-selectors-syntax-selector-ts
Source text: https://banes-lab.com/source/patterns/core/selectors/syntax.selector.ts.txt

Listed in [core/selectors](https://banes-lab.com/api/source/patterns/core/selectors.md), after [core/selectors/representation.selector.ts](https://banes-lab.com/source/patterns/core/selectors/representation.selector.ts.md).

## Definitions

- `childNodes` (lexical_declaration, line 3, exported)
- `lineOf` (lexical_declaration, line 22, exported)
- `fieldText` (lexical_declaration, line 14, exported)
- `out` (lexical_declaration, line 4, exported)
- `index` (lexical_declaration, line 5, exported)
- `child` (lexical_declaration, line 6, exported)
- `fieldType` (lexical_declaration, line 18, exported)

## Contained in

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

## Used by

- [core/parsers/definition.parser.ts](https://banes-lab.com/source/patterns/core/parsers/definition.parser.ts.md)
- [core/parsers/dependency.parser.ts](https://banes-lab.com/source/patterns/core/parsers/dependency.parser.ts.md)
- [core/parsers/syntax.parser.ts](https://banes-lab.com/source/patterns/core/parsers/syntax.parser.ts.md)

## Linked from

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

## Source

```typescript
import type { CstNode } from "@govlab/code-parse";

export const childNodes = function childNodes(node: CstNode): CstNode[] {
    const out: CstNode[] = [];
    for (let index = 0; index < node.childCount; index += 1) {
        const child = node.child(index);
        if (child !== null) {
            out.push(child);
        }
    }
    return out;
};

export const fieldText = function fieldText(node: CstNode, field: string): string {
    return node.childForFieldName?.(field)?.text ?? "";
};

export const fieldType = function fieldType(node: CstNode, field: string): string | undefined {
    return node.childForFieldName?.(field)?.type;
};

export const lineOf = function lineOf(node: CstNode): number {
    return (node.startPosition?.row ?? 0) + 1;
};
```
