fix: Resolve all ESLint errors and warnings in web package
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

Fixes all 542 ESLint problems in the web package to achieve 0 errors and 0 warnings.

Changes:
- Fixed 144 issues: nullish coalescing, return types, unused variables
- Fixed 118 issues: unnecessary conditions, type safety, template literals
- Fixed 79 issues: non-null assertions, unsafe assignments, empty functions
- Fixed 67 issues: explicit return types, promise handling, enum comparisons
- Fixed 45 final warnings: missing return types, optional chains
- Fixed 25 typecheck-related issues: async/await, type assertions, formatting
- Fixed JSX.Element namespace errors across 90+ files

All Quality Rails violations resolved. Lint and typecheck both pass with 0 problems.

Files modified: 118 components, tests, hooks, and utilities

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-31 00:10:03 -06:00
parent f0704db560
commit ac1f2c176f
117 changed files with 749 additions and 505 deletions

View File

@@ -85,21 +85,23 @@ describe("TaskList", (): void => {
describe("error states", (): void => {
it("should handle undefined tasks gracefully", (): void => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
render(<TaskList tasks={undefined as any} isLoading={false} />);
render(<TaskList tasks={undefined as unknown as Task[]} isLoading={false} />);
expect(screen.getByText(/no tasks scheduled/i)).toBeInTheDocument();
});
it("should handle null tasks gracefully", (): void => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
render(<TaskList tasks={null as any} isLoading={false} />);
render(<TaskList tasks={null as unknown as Task[]} isLoading={false} />);
expect(screen.getByText(/no tasks scheduled/i)).toBeInTheDocument();
});
it("should handle tasks with missing required fields", (): void => {
const firstTask = mockTasks[0];
if (!firstTask) {
throw new Error("Mock task not found");
}
const malformedTasks: Task[] = [
{
...mockTasks[0]!,
...firstTask,
title: "", // Empty title
},
];
@@ -110,9 +112,13 @@ describe("TaskList", (): void => {
});
it("should handle tasks with invalid dates", (): void => {
const firstTask = mockTasks[0];
if (!firstTask) {
throw new Error("Mock task not found");
}
const tasksWithBadDates: Task[] = [
{
...mockTasks[0]!,
...firstTask,
dueDate: new Date("invalid-date"),
},
];
@@ -122,10 +128,14 @@ describe("TaskList", (): void => {
});
it("should handle extremely large task lists", (): void => {
const firstTask = mockTasks[0];
if (!firstTask) {
throw new Error("Mock task not found");
}
const largeTasks: Task[] = Array.from({ length: 1000 }, (_, i) => ({
...mockTasks[0]!,
id: `task-${i}`,
title: `Task ${i}`,
...firstTask,
id: `task-${String(i)}`,
title: `Task ${String(i)}`,
}));
render(<TaskList tasks={largeTasks} isLoading={false} />);
@@ -133,8 +143,12 @@ describe("TaskList", (): void => {
});
it("should handle tasks with very long titles", (): void => {
const firstTask = mockTasks[0];
if (!firstTask) {
throw new Error("Mock task not found");
}
const longTitleTask: Task = {
...mockTasks[0]!,
...firstTask,
title: "A".repeat(500),
};
@@ -143,8 +157,12 @@ describe("TaskList", (): void => {
});
it("should handle tasks with special characters in title", (): void => {
const firstTask = mockTasks[0];
if (!firstTask) {
throw new Error("Mock task not found");
}
const specialCharTask: Task = {
...mockTasks[0]!,
...firstTask,
title: '<script>alert("xss")</script>',
};