# test.govlab/quality/core/parsers/tool.clang-tidy.parser.test.ts

> 52 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-clang-tidy-parser-test-ts
Source text: https://banes-lab.com/source/testing/test.govlab/quality/core/parsers/tool.clang-tidy.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.checkov.parser.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/parsers/tool.checkov.parser.test.ts.md) and before [test.govlab/quality/core/parsers/tool.clippy.parser.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/parsers/tool.clippy.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 { parseClangTidyOutput } from "@govlab/quality/core/parsers/tool.clang-tidy.parser.ts";

const EXPECTED_COUNT = 2;

const RECORDED = [
    String.raw`D:\GIT\govlab\cpp\bad.cpp:2:14: warning: use nullptr [modernize-use-nullptr]`,
    "    2 |     int* p = 0;",
    "      |              ^",
    "      |              nullptr",
    "src/x.cpp:5:3: error: use of undeclared identifier 'foo' [clang-diagnostic-error]",
].join("\n");

describe("parseClangTidyOutput", () => {
    it("parses each diagnostic to an ADVISORY finding (advisory:true), keeping a Windows drive path and reading the check id", () => {
        const findings = parseClangTidyOutput(RECORDED, "cpp");
        expect(findings).toHaveLength(EXPECTED_COUNT);
        expect(findings.every((finding) => finding.advisory)).toBe(true);
        expect(findings[0]).toMatchObject({
            advisory: true,
            column: 14,
            ecosystem: "cpp",
            file: "D:\\GIT\\govlab\\cpp\\bad.cpp",
            line: 2,
            ruleId: "modernize-use-nullptr",
            severity: "error",
            tool: "clang-tidy",
        });
        expect(findings[1]).toMatchObject({
            advisory: true,
            file: "src/x.cpp",
            line: 5,
            ruleId: "clang-diagnostic-error",
            severity: "error",
        });
    });

    it("takes the EARLIEST severity marker, so a warning whose message contains ': error: ' is not dropped", () => {
        const findings = parseClangTidyOutput(
            "foo.cpp:3:5: warning: do not write : error: in text [readability-x]",
            "cpp",
        );
        expect(findings).toHaveLength(1);
        expect(findings[0]).toMatchObject({
            column: 5,
            file: "foo.cpp",
            line: 3,
            ruleId: "readability-x",
            severity: "error",
        });
    });

    it("drops snippet/caret lines and returns [] on empty or marker-less output", () => {
        expect(parseClangTidyOutput("", "cpp")).toEqual([]);
        expect(parseClangTidyOutput("5 warnings generated.\n    2 |     int* p = 0;", "cpp")).toEqual([]);
    });
});
```
