refactor: remove unused vars and dead code

Cleanup surfaced once the oxlint config actually loads (no-unused-vars).

- drop dead locals/imports/params (cachedOffsetTop, elasticOut, key,
  unused type imports, unused test imports; _-prefix unused mock params)
- createVirtualizer: keep the _version read (reactive subscription inside
  $derived.by) but bind it to _v so it is not flagged
- scrollBreadcrumbsStore.test: keep the removeEventListener mock side
  effect, drop the unread spy binding
This commit is contained in:
Ilia Mashkov
2026-06-02 23:01:48 +03:00
parent deefb51b57
commit 9788f07dec
10 changed files with 7 additions and 35 deletions
@@ -71,7 +71,7 @@ describe('loadFont', () => {
it('throws FontParseError when font.load() rejects', async () => { it('throws FontParseError when font.load() rejects', async () => {
const loadError = new Error('parse failed'); const loadError = new Error('parse failed');
const MockFontFace = vi.fn( const MockFontFace = vi.fn(
function(this: any, name: string, buffer: BufferSource, options: FontFaceDescriptors) { function(this: any, _name: string, _buffer: BufferSource, _options: FontFaceDescriptors) {
this.load = vi.fn().mockRejectedValue(loadError); this.load = vi.fn().mockRejectedValue(loadError);
}, },
); );
+1 -5
View File
@@ -21,11 +21,7 @@
*/ */
import type { UnifiedFont } from '$entities/Font/model/types'; import type { UnifiedFont } from '$entities/Font/model/types';
import type { import type { QueryStatus } from '@tanstack/svelte-query';
QueryKey,
QueryObserverResult,
QueryStatus,
} from '@tanstack/svelte-query';
import { import {
UNIFIED_FONTS, UNIFIED_FONTS,
generateMockFonts, generateMockFonts,
@@ -302,9 +302,6 @@ export class TypographySettingsStore {
if (c.id === 'font_size') { if (c.id === 'font_size') {
c.instance.value = defaults.fontSize * this.#multiplier; c.instance.value = defaults.fontSize * this.#multiplier;
} else { } else {
// Map storage key to control id
const key = c.id.replace('_', '') as keyof TypographySettings;
// Simplified for brevity, you'd map these properly:
if (c.id === 'font_weight') { if (c.id === 'font_weight') {
c.instance.value = defaults.fontWeight; c.instance.value = defaults.fontWeight;
} }
@@ -70,7 +70,6 @@ class MockIntersectionObserver implements IntersectionObserver {
describe('ScrollBreadcrumbsStore', () => { describe('ScrollBreadcrumbsStore', () => {
let scrollListeners: Array<() => void> = []; let scrollListeners: Array<() => void> = [];
let addEventListenerSpy: ReturnType<typeof vi.spyOn>; let addEventListenerSpy: ReturnType<typeof vi.spyOn>;
let removeEventListenerSpy: ReturnType<typeof vi.spyOn>;
let scrollToSpy: ReturnType<typeof vi.spyOn>; let scrollToSpy: ReturnType<typeof vi.spyOn>;
// Helper to create mock elements // Helper to create mock elements
@@ -111,7 +110,7 @@ describe('ScrollBreadcrumbsStore', () => {
// Track scroll event listeners // Track scroll event listeners
addEventListenerSpy = vi.spyOn(window, 'addEventListener').mockImplementation( addEventListenerSpy = vi.spyOn(window, 'addEventListener').mockImplementation(
(event: string, listener: EventListenerOrEventListenerObject, options?: any) => { (event: string, listener: EventListenerOrEventListenerObject, _options?: any) => {
if (event === 'scroll') { if (event === 'scroll') {
scrollListeners.push(listener as () => void); scrollListeners.push(listener as () => void);
} }
@@ -119,7 +118,7 @@ describe('ScrollBreadcrumbsStore', () => {
}, },
); );
removeEventListenerSpy = vi.spyOn(window, 'removeEventListener').mockImplementation( vi.spyOn(window, 'removeEventListener').mockImplementation(
(event: string, listener: EventListenerOrEventListenerObject) => { (event: string, listener: EventListenerOrEventListenerObject) => {
if (event === 'scroll') { if (event === 'scroll') {
const index = scrollListeners.indexOf(listener as () => void); const index = scrollListeners.indexOf(listener as () => void);
@@ -29,12 +29,6 @@ import { createAppliedFilterStore } from './appliedFilterStore.svelte';
* testing Svelte 5 reactive code in Node.js. * testing Svelte 5 reactive code in Node.js.
*/ */
// Helper to flush Svelte effects (they run in microtasks)
async function flushEffects() {
await Promise.resolve();
await Promise.resolve();
}
// Helper to create test properties // Helper to create test properties
function createTestProperties(count: number, selectedIndices: number[] = []): Property<string>[] { function createTestProperties(count: number, selectedIndices: number[] = []): Property<string>[] {
return Array.from({ length: count }, (_, i) => ({ return Array.from({ length: count }, (_, i) => ({
@@ -156,7 +156,7 @@ export function createVirtualizer<T>(
const offsets = $derived.by(() => { const offsets = $derived.by(() => {
const count = options.count; const count = options.count;
// Implicit dependency on version signal // Implicit dependency on version signal
const v = _version; const _v = _version;
const result = new Float64Array(count); const result = new Float64Array(count);
let accumulated = 0; let accumulated = 0;
for (let i = 0; i < count; i++) { for (let i = 0; i < count; i++) {
@@ -180,7 +180,7 @@ export function createVirtualizer<T>(
// this derivation when the items array is replaced! // this derivation when the items array is replaced!
const { count, data } = options; const { count, data } = options;
// Implicit dependency // Implicit dependency
const v = _version; const _v = _version;
if (count === 0 || containerHeight === 0 || !data) { if (count === 0 || containerHeight === 0 || !data) {
return []; return [];
} }
@@ -268,7 +268,6 @@ export function createVirtualizer<T>(
return rect.top + scrollY; return rect.top + scrollY;
}; };
let cachedOffsetTop = 0;
let rafId: number | null = null; let rafId: number | null = null;
containerHeight = typeof window !== 'undefined' ? window.innerHeight : 0; containerHeight = typeof window !== 'undefined' ? window.innerHeight : 0;
@@ -292,14 +291,12 @@ export function createVirtualizer<T>(
const handleResize = () => { const handleResize = () => {
containerHeight = window.innerHeight; containerHeight = window.innerHeight;
elementOffsetTop = getElementOffset(); elementOffsetTop = getElementOffset();
cachedOffsetTop = elementOffsetTop;
handleScroll(); handleScroll();
}; };
// Initial setup // Initial setup
requestAnimationFrame(() => { requestAnimationFrame(() => {
elementOffsetTop = getElementOffset(); elementOffsetTop = getElementOffset();
cachedOffsetTop = elementOffsetTop;
handleScroll(); handleScroll();
}); });
@@ -3,10 +3,6 @@ import type {
TransitionConfig, TransitionConfig,
} from 'svelte/transition'; } from 'svelte/transition';
function elasticOut(t: number) {
return Math.pow(2, -10 * t) * Math.sin((t - 0.075) * (2 * Math.PI) / 0.3) + 1;
}
function gentleSpring(t: number) { function gentleSpring(t: number) {
return 1 - Math.pow(1 - t, 3) * Math.cos(t * Math.PI * 2); return 1 - Math.pow(1 - t, 3) * Math.cos(t * Math.PI * 2);
} }
@@ -1,4 +1,3 @@
import { VIRTUAL_INDEX_NOT_LOADED } from '$entities/Font';
import { cubicOut } from 'svelte/easing'; import { cubicOut } from 'svelte/easing';
import { import {
type CrossfadeParams, type CrossfadeParams,
@@ -2,12 +2,8 @@ import {
render, render,
screen, screen,
} from '@testing-library/svelte'; } from '@testing-library/svelte';
import { setContext } from 'svelte';
import Footer from './Footer.svelte'; import Footer from './Footer.svelte';
// Mock component to provide context
import ContextWrapper from '$shared/lib/providers/ResponsiveProvider/ResponsiveProvider.svelte';
describe('Footer', () => { describe('Footer', () => {
const currentYear = new Date().getFullYear(); const currentYear = new Date().getFullYear();
@@ -18,7 +14,7 @@ describe('Footer', () => {
isDesktopLarge: false, isDesktopLarge: false,
}; };
const { container } = render(Footer, { render(Footer, {
context: new Map([['responsive', mockResponsive]]), context: new Map([['responsive', mockResponsive]]),
}); });
@@ -3,12 +3,10 @@
*/ */
import { import {
afterEach,
beforeEach, beforeEach,
describe, describe,
expect, expect,
it, it,
vi,
} from 'vitest'; } from 'vitest';
// Helper to flush Svelte effects (they run in microtasks) // Helper to flush Svelte effects (they run in microtasks)