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

> 38 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-luacheck-parser-test-ts
Source text: https://banes-lab.com/source/testing/test.govlab/quality/core/parsers/tool.luacheck.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.lintr.parser.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/parsers/tool.lintr.parser.test.ts.md) and before [test.govlab/quality/core/parsers/tool.madge.parser.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/parsers/tool.madge.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 { parseLuacheckOutput } from "@govlab/quality/core/parsers/tool.luacheck.parser.ts";

const EXPECTED_COUNT = 2;

const RECORDED = [
    "lua/bad.lua:1:16: (W211) unused function 'add'",
    "lua/bad.lua:2:11: (W211) unused variable 'unused'",
].join("\n");

describe("parseLuacheckOutput", () => {
    it("parses each plain line into an ADVISORY finding (advisory:true), reading line/col from the location tail", () => {
        const findings = parseLuacheckOutput(RECORDED, "lua");
        expect(findings).toHaveLength(EXPECTED_COUNT);
        expect(findings.every((finding) => finding.advisory)).toBe(true);
        expect(findings[1]).toMatchObject({
            advisory: true,
            column: 11,
            ecosystem: "lua",
            file: "lua/bad.lua",
            line: 2,
            ruleId: "W211",
            severity: "error",
            tool: "luacheck",
        });
    });

    it("keeps a Windows drive-letter prefix in the file path (split-on-colon takes the last two segments)", () => {
        const findings = parseLuacheckOutput(String.raw`C:\src\bad.lua:3:5: (E011) syntax error`, "lua");
        expect(findings[0]).toMatchObject({
            column: 5,
            file: "C:\\src\\bad.lua",
            line: 3,
            ruleId: "E011",
            severity: "error",
        });
    });

    it("returns [] on empty output or lines with no code marker", () => {
        expect(parseLuacheckOutput("", "lua")).toEqual([]);
        expect(parseLuacheckOutput("Total: 0 warnings / 0 errors in 1 file", "lua")).toEqual([]);
    });
});
```
