# core/parsers/location.parser.ts

> 20 lines of code and 5 definitions.

Tree: GovLab Quality
Language: typescript
Layer: processing
Canonical: https://banes-lab.com/anatomy/quality#file-quality-core-parsers-location-parser-ts
Source text: https://banes-lab.com/source/quality/core/parsers/location.parser.ts.txt

Listed in [core/parsers](https://banes-lab.com/api/source/quality/core/parsers.md), after [core/parsers/knob.parser.ts](https://banes-lab.com/source/quality/core/parsers/knob.parser.ts.md) and before [core/parsers/record.parser.ts](https://banes-lab.com/source/quality/core/parsers/record.parser.ts.md).

## Definitions

- `parseLines` (lexical_declaration, line 17, exported)
- `parseLocation` (lexical_declaration, line 4, exported)
- `segments` (lexical_declaration, line 5, exported)
- `column` (lexical_declaration, line 9, exported)
- `line` (lexical_declaration, line 10, exported)

## Contained in

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

## Used by

- [core/parsers/tool.clang-tidy.parser.ts](https://banes-lab.com/source/quality/core/parsers/tool.clang-tidy.parser.ts.md)
- [core/parsers/tool.clippy.parser.ts](https://banes-lab.com/source/quality/core/parsers/tool.clippy.parser.ts.md)
- [core/parsers/tool.go-critic.parser.ts](https://banes-lab.com/source/quality/core/parsers/tool.go-critic.parser.ts.md)
- [core/parsers/tool.lintr.parser.ts](https://banes-lab.com/source/quality/core/parsers/tool.lintr.parser.ts.md)
- [core/parsers/tool.luacheck.parser.ts](https://banes-lab.com/source/quality/core/parsers/tool.luacheck.parser.ts.md)
- [core/parsers/tool.staticcheck.parser.ts](https://banes-lab.com/source/quality/core/parsers/tool.staticcheck.parser.ts.md)
- [core/parsers/tool.stylua.parser.ts](https://banes-lab.com/source/quality/core/parsers/tool.stylua.parser.ts.md)
- [core/parsers/tool.ts-prune.parser.ts](https://banes-lab.com/source/quality/core/parsers/tool.ts-prune.parser.ts.md)
- [core/parsers/tool.yamllint.parser.ts](https://banes-lab.com/source/quality/core/parsers/tool.yamllint.parser.ts.md)

## Linked from

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

## Source

```typescript
import { LOCATION_SEGMENTS } from "#configuration/constants/tool.constants";
import type { SourceLocation } from "#types/finding.types";

export const parseLocation = function parseLocation(location: string): SourceLocation | null {
    const segments = location.split(":");
    if (segments.length < LOCATION_SEGMENTS + 1) {
        return null;
    }
    const column = Number(segments.at(-1));
    const line = Number(segments[segments.length - LOCATION_SEGMENTS]);
    if (!Number.isInteger(line) || !Number.isInteger(column)) {
        return null;
    }
    return { column, file: segments.slice(0, segments.length - LOCATION_SEGMENTS).join(":"), line };
};

export const parseLines = function parseLines<T>(text: string, parseLine: (line: string) => T | null): T[] {
    return text
        .split("\n")
        .map((line) => parseLine(line.trim()))
        .filter((entry): entry is T => entry !== null);
};
```
