# test.govlab/quality/core/parsers/tool.lintr.parser.test.ts

> 37 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-govlab-quality-core-parsers-tool-lintr-parser-test-ts
Source text: https://banes-lab.com/source/testing/test.govlab/quality/core/parsers/tool.lintr.parser.test.ts.txt

Listed in [test.govlab/quality/core/parsers](https://banes-lab.com/api/source/testing/test.govlab/quality/core/parsers.md), after [test.govlab/quality/core/parsers/tool.knip.parser.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/parsers/tool.knip.parser.test.ts.md) and before [test.govlab/quality/core/parsers/tool.luacheck.parser.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/parsers/tool.luacheck.parser.test.ts.md).

## Contained in

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

## Source

```typescript
import { describe, expect, it } from "vitest";
import { parseLintrOutput } from "@govlab/quality/core/parsers/tool.lintr.parser.ts";

const EXPECTED_COUNT = 2;

const DELIM = "~|~";
const RECORDED = [
    ["/mnt/d/…/Bad.R", "1", "3", "style", "assignment_linter", "Use one of <-, <<- for assignment, not =."].join(DELIM),
    ["/mnt/d/…/Bad.R", "3", "4", "warning", "object_usage_linter", `no visible binding for '~|~x'`].join(DELIM),
    "",
].join("\n");

describe("parseLintrOutput", () => {
    it("maps each record to an advisory (advisory:true) finding keyed by linter, type→severity, tail re-joined", () => {
        const findings = parseLintrOutput(RECORDED, "r");
        expect(findings).toHaveLength(EXPECTED_COUNT);
        expect(findings[0]).toMatchObject({
            advisory: true,
            column: 3,
            ecosystem: "r",
            file: "/mnt/d/…/Bad.R",
            line: 1,
            message: "Use one of <-, <<- for assignment, not =.",
            ruleId: "assignment_linter",
            severity: "error",
            tool: "lintr",
        });
        expect(findings[1]).toMatchObject({
            advisory: true,
            line: 3,
            message: "no visible binding for '~|~x'",
            ruleId: "object_usage_linter",
        });
    });

    it("returns [] on empty output or lines with too few fields", () => {
        expect(parseLintrOutput("", "r")).toEqual([]);
        expect(parseLintrOutput("some banner without the delimiter", "r")).toEqual([]);
        expect(parseLintrOutput("a~|~b~|~c", "r")).toEqual([]);
    });
});
```
