chore(lint): enforce named core types in tests

- Remove the broad test exception for inline named type literals
- Replace duplicated Color, Vector, and Rect shapes with shared core types
- Keep affected engine tests passing
This commit is contained in:
Danila Poyarkov 2026-05-06 02:38:27 +03:00
parent a63ac93a3d
commit 0af8cd271e
7 changed files with 18 additions and 35 deletions

View file

@ -167,7 +167,6 @@
"typescript/no-non-null-assertion": "off",
"no-unused-vars": "off",
"no-empty-function": "off",
"open-pencil/no-inline-named-types": "off",
"complexity": "off"
}
},

View file

@ -1,5 +1,6 @@
import { describe, test, expect } from 'bun:test'
import type { Vector } from '@open-pencil/core'
import type { VectorNetwork } from '@open-pencil/core/scene-graph'
import { fitCircleArc, isClosedThinCrescent } from '@open-pencil/core/vector'
@ -12,13 +13,8 @@ function makeAnnularWedge(
sweepDeg: number,
segmentsPerArc: number
): VectorNetwork {
const vertices: { x: number; y: number }[] = []
const segments: {
start: number
end: number
tangentStart: { x: number; y: number }
tangentEnd: { x: number; y: number }
}[] = []
const vertices: Vector[] = []
const segments: VectorNetwork['segments'] = []
for (let i = 0; i <= segmentsPerArc; i++) {
const angle = ((startDeg + (sweepDeg * i) / segmentsPerArc) * Math.PI) / 180

View file

@ -1,6 +1,6 @@
import { describe, test, expect } from 'bun:test'
import { SceneGraph, type Effect } from '@open-pencil/core'
import { SceneGraph, type Effect, type Rect } from '@open-pencil/core'
function pageId(graph: SceneGraph) {
return graph.getPages()[0].id
@ -180,7 +180,7 @@ describe('Effect types on scene graph', () => {
describe('Resize logic', () => {
function applyResize(
handle: string,
origRect: { x: number; y: number; width: number; height: number },
origRect: Rect,
startX: number,
startY: number,
cx: number,

View file

@ -20,12 +20,7 @@ describe('COLOR variable alpha handling', () => {
const vars = [...reimported.variables.values()]
const colorVar = vars.find((v) => v.name === 'brand')!
expect(colorVar.type).toBe('COLOR')
const val = Object.values(colorVar.valuesByMode)[0] as {
r: number
g: number
b: number
a: number
}
const val = Object.values(colorVar.valuesByMode)[0] as Color
expect(val.r).toBeCloseTo(0.2, 1)
expect(val.g).toBeCloseTo(0.4, 1)
expect(val.b).toBeCloseTo(0.8, 1)
@ -42,12 +37,7 @@ describe('COLOR variable alpha handling', () => {
const vars = [...reimported.variables.values()]
const colorVar = vars.find((v) => v.name === 'overlay')!
const val = Object.values(colorVar.valuesByMode)[0] as {
r: number
g: number
b: number
a: number
}
const val = Object.values(colorVar.valuesByMode)[0] as Color
expect(val.a).toBeCloseTo(0.5, 1)
})

View file

@ -9,7 +9,8 @@ import {
SceneGraph,
FigmaAPI,
type SceneNode,
type Fill
type Fill,
type Color
} from '@open-pencil/core'
import { computeContentBounds } from '#core/io/formats/raster/render'
@ -57,12 +58,7 @@ describe('variable roundtrip', () => {
const colorVar = vars.find((v) => v.name === 'color/primary')
expect(colorVar).toBeDefined()
expect(expectDefined(colorVar, 'colorVar').type).toBe('COLOR')
const colorVal = Object.values(colorVar.valuesByMode)[0] as {
r: number
g: number
b: number
a: number
}
const colorVal = Object.values(colorVar.valuesByMode)[0] as Color
expect(colorVal.r).toBeCloseTo(0.23, 1)
const floatVar = vars.find((v) => v.name === 'spacing/base')

View file

@ -14,7 +14,8 @@ import {
radToDeg,
rotatePoint,
rotatedCorners,
rotatedBBox
rotatedBBox,
type Vector
} from '@open-pencil/core'
import { computeVisualBounds } from '#core/geometry'
@ -159,7 +160,7 @@ describe('computeBounds', () => {
describe('computeAbsoluteBounds', () => {
const idPos = (id: string) => {
const map: Record<string, { x: number; y: number }> = {
const map: Record<string, Vector> = {
a: { x: 10, y: 20 },
b: { x: 50, y: 60 },
c: { x: 0, y: 0 }
@ -190,7 +191,7 @@ describe('computeAbsoluteBounds', () => {
describe('computeVisualBounds', () => {
const idPos = (id: string) => {
const map: Record<string, { x: number; y: number }> = {
const map: Record<string, Vector> = {
r1: { x: 100, y: 200 },
r2: { x: 300, y: 400 },
rotated: { x: 0, y: 0 }

View file

@ -7,20 +7,21 @@ import { renderNodesToImage } from '#core/io/formats/raster'
import { SceneGraph } from '#core/scene-graph'
import type { SceneNode } from '#core/scene-graph'
import { fontManager } from '#core/text'
import type { Color, Vector } from '#core/types'
interface TestCase {
text: string
fontSize: number
offset: { x: number; y: number }
offset: Vector
radius: number
spread: number
color: { r: number; g: number; b: number; a: number }
color: Color
}
function generateMatrix(): TestCase[] {
const cases: TestCase[] = []
const offsets: Array<{ x: number; y: number }> = [
const offsets: Vector[] = [
{ x: 0, y: 0 },
{ x: 10, y: 10 },
{ x: -5, y: 5 },