mirror of
https://github.com/stablyai/orca.git
synced 2026-10-23 16:03:49 +00:00
The type-aware scan pins config/oxlint-code-quality-type-aware.json, and mobile's types resolve only from mobile/node_modules. Every mobile import of a type that lives there becomes an 'error' type under the root config, and no-redundant-type-constituents then reports it as a real finding - eight of them on this PR, none reproducible with the package script, which scopes that scan to 'src config tests' precisely because of this. The untyped scan already documents the same hazard and avoids it by not pinning a config at all. The type-aware scan cannot do that, so it skips mobile instead.
70 lines
2.7 KiB
JavaScript
70 lines
2.7 KiB
JavaScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
OXLINT_SCANS,
|
|
diagnosticTouchesAddedLines,
|
|
overlapsAddedLines,
|
|
parseAddedLineRanges
|
|
} from './check-changed-code-quality.mjs'
|
|
|
|
describe('changed-code quality line matching', () => {
|
|
it('parses added and replaced hunk ranges while ignoring deletions', () => {
|
|
const ranges = parseAddedLineRanges(
|
|
['@@ -10,2 +10,3 @@', '@@ -20 +21 @@', '@@ -40,4 +42,0 @@', '@@ -50 +48,2 @@'].join('\n')
|
|
)
|
|
|
|
expect(ranges).toEqual([
|
|
{ start: 10, end: 12 },
|
|
{ start: 21, end: 21 },
|
|
{ start: 48, end: 49 }
|
|
])
|
|
})
|
|
|
|
it('matches diagnostics that overlap any added line', () => {
|
|
const ranges = [
|
|
{ start: 5, end: 7 },
|
|
{ start: 12, end: 12 }
|
|
]
|
|
|
|
expect(overlapsAddedLines(3, 5, ranges)).toBe(true)
|
|
expect(overlapsAddedLines(8, 11, ranges)).toBe(false)
|
|
expect(overlapsAddedLines(12, 14, ranges)).toBe(true)
|
|
})
|
|
|
|
it('normalizes absolute diagnostic paths before matching', () => {
|
|
const root = process.cwd()
|
|
const file = 'config/scripts/check-changed-code-quality.test.mjs'
|
|
const diagnostic = {
|
|
filename: `${root}/${file}`,
|
|
labels: [{ span: { line: 24 } }]
|
|
}
|
|
|
|
expect(
|
|
diagnosticTouchesAddedLines(diagnostic, new Map([[file, [{ start: 24, end: 24 }]]]), root)
|
|
).toBe(true)
|
|
})
|
|
|
|
// Why: pinning --config disables nested-config discovery, so root rules that
|
|
// mobile/.oxlintrc.json turns off would fail the gate on mobile files.
|
|
it('lets the untyped scan discover nested configs instead of pinning the root config', () => {
|
|
const scan = OXLINT_SCANS.find((candidate) => candidate.label === 'code quality')
|
|
|
|
expect(scan.args).not.toContain('--config')
|
|
expect(scan.args).not.toContain('--disable-nested-config')
|
|
})
|
|
|
|
// Why: the type-aware scan DOES pin the root config, and mobile's types resolve only from
|
|
// mobile/node_modules. Linting mobile under the root config makes every such import an `error`
|
|
// type, which no-redundant-type-constituents reports as a real finding — findings the package
|
|
// script cannot reproduce, because it scopes this scan to `src config tests`.
|
|
it('keeps the type-aware scan off mobile, whose types the root config cannot resolve', () => {
|
|
const scan = OXLINT_SCANS.find((candidate) => candidate.label === 'type-aware code quality')
|
|
|
|
expect(scan.args).toContain('--type-aware')
|
|
expect(scan.excludes('mobile/src/session/use-mobile-structured-attachments.test.ts')).toBe(true)
|
|
expect(scan.excludes('mobile')).toBe(true)
|
|
expect(scan.excludes('src/main/runtime/orca-runtime.ts')).toBe(false)
|
|
// A path that merely starts with the same letters is not inside the package.
|
|
expect(scan.excludes('mobile-shim/src/a.ts')).toBe(false)
|
|
})
|
|
})
|