Files
lucide/icons
55b9969b82 ci(lint): split lint jobs and annotate Prettier and JSON schema errors in PRs (#4982)
* ci: split lint-code into ESLint, Prettier and JSON Schema jobs with PR annotations

- ESLint: annotations via setup-node's built-in eslint-stylish problem matcher.
- Prettier: new scripts/lintFormat.mts formats unformatted files in memory, diffs
  them and emits line-level `::error` annotations with the expected code.
- JSON Schema: replace ajv-cli with a local ESLint rule (Ajv draft 2020-12) that
  validates icons/categories JSON against their `$schema` and reports at the
  offending property. eslint-plugin-json-schema-validator was not used because it
  runs Ajv in draft-07 mode and ignores `dependentRequired`.

All annotations use workflow commands, so they work on fork PRs with a read-only token.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVxEtqNswEDq1N23taZYh8

* Improve root value check and property error handling

Enhance error reporting for JSON schema validation.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* style(lint): format jsonSchemaPlugin with Prettier

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVxEtqNswEDq1N23taZYh8

* test commit

* fix(lint): annotate syntax errors from Prettier and ESLint in PRs

- ESLint/JSON Schema jobs use a small GitHub formatter that prints `::error`
  workflow commands. setup-node's eslint-stylish matcher skipped parsing errors
  because they have no rule id.
- lintFormat.mts annotates Prettier syntax errors (exit code 2) at their line and
  column instead of only printing stderr, and still checks the other files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVxEtqNswEDq1N23taZYh8

* ci(lint): spell check icon and category metadata with cspell annotations

- New "Spelling" job runs scripts/lintSpelling.mts, which turns cspell findings
  into `::error` annotations (with cspell's suggested fix when it has one).
- cspell accepts both US and British English, ignores contributor usernames and
  deprecated `alias.typo` aliases.
- Add existing search tags and domain terms to .cspell/custom-words.txt so the
  current metadata passes.
- Add `lint:spelling` to `pnpm lint` and lint-staged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVxEtqNswEDq1N23taZYh8

* fix(lint): pin JSON schemas per file set and drop typo tags

- json-schema/no-invalid now takes the schema from config (icon.schema.json for
  icons, category.schema.json for categories) and reports a `$schema` that
  points elsewhere, so metadata can't opt out of validation.
- Remove the misspelled `frigerator` and `sterisk` tags and their allowlist entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVxEtqNswEDq1N23taZYh8

* fix(icons): split joined-word tags into separate words

Tags like `groupchat` and `timemachine` become `group chat` and `time machine`
so they read naturally and pass the spell check without allowlisting. Where the
spaced tag already existed (`smart home`) the joined one is dropped.

cspell now skips all alias names, since they are icon names that can't change
(e.g. the deprecated `palmtree` alias).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVxEtqNswEDq1N23taZYh8

* Revert

* Try another error

* Revert error

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-09 11:30:00 +02:00
..
2026-07-23 07:47:39 +02:00
2026-06-13 12:41:38 +02:00
2023-06-01 09:14:58 +02:00
2026-08-07 12:28:36 +02:00
2026-08-07 12:28:36 +02:00
2024-02-19 08:11:29 +01:00
…
…
2025-05-09 10:08:49 +02:00
…
…
2022-07-11 20:17:01 +02:00
…
…
2026-08-28 12:21:38 +02:00
2022-06-16 11:15:49 +02:00
…
…
2023-06-11 20:51:26 +02:00
2023-03-10 22:13:44 +01:00
2023-03-04 11:53:29 +01:00
…
…
…
…
…
2023-07-17 21:16:43 +02:00
…
2023-08-15 19:34:12 +02:00
…
2023-12-20 09:08:50 +01:00
…
2025-08-29 09:53:32 +02:00
2023-08-07 11:21:42 +02:00
…
2023-04-08 17:27:53 +02:00
2026-09-01 15:35:33 +02:00
2026-09-01 15:35:33 +02:00
…
2024-02-05 19:34:34 +01:00
2023-08-07 11:21:42 +02:00
2023-08-07 11:21:42 +02:00
…
2023-02-14 07:11:42 +01:00
…
2022-11-01 17:30:41 +01:00
…
2022-07-11 20:17:01 +02:00
2023-06-04 22:20:07 +02:00
2023-04-16 18:45:34 +02:00
2023-04-08 17:27:53 +02:00
2023-04-08 17:27:53 +02:00
…
…
2025-08-22 10:22:52 +02:00
2023-12-28 14:47:14 +01:00
2023-10-02 19:29:54 +02:00
2023-04-16 18:13:26 +02:00
2023-04-16 18:13:26 +02:00
…
2025-04-18 15:18:26 +02:00
…
2026-02-26 11:02:02 +01:00
2023-04-08 17:27:53 +02:00
2023-10-02 19:29:54 +02:00
2024-07-22 09:31:59 +02:00
2023-04-08 17:27:53 +02:00
2023-04-08 17:27:53 +02:00
…
…
…
…
2026-09-04 15:07:48 +02:00
…
…
…
…
…
…
2025-06-18 09:27:59 +02:00
2023-04-08 17:27:53 +02:00
…
…
…
2022-08-10 15:32:26 +02:00
…
…
2023-04-08 17:27:53 +02:00
…
2025-06-27 12:11:16 +02:00
…
2024-02-12 16:18:39 +01:00
2025-11-26 09:27:36 +01:00
2023-04-08 17:27:53 +02:00
2023-04-08 17:27:53 +02:00
…
2025-07-28 10:10:14 +02:00
2026-02-17 07:56:09 +01:00
2023-10-27 08:56:26 +02:00
…
…
2026-03-14 20:58:03 +01:00
…
2023-08-06 16:24:50 +02:00
2020-06-16 09:44:56 +01:00
…
…
…
2024-02-01 16:37:10 +01:00
…
…
2025-12-10 13:56:10 +01:00
2024-02-20 15:32:43 +01:00
…
…
2023-04-08 17:27:53 +02:00
…
…
2023-05-03 13:37:50 +02:00
2026-08-28 14:17:48 +02:00
…
2023-05-05 13:27:35 +02:00
2026-10-08 09:16:31 +02:00
2026-10-08 09:16:31 +02:00
2023-04-08 17:27:53 +02:00
…
2023-04-08 17:27:53 +02:00
2022-07-20 23:19:49 +02:00
2022-07-20 23:19:49 +02:00
…
…
…
…
2025-06-13 09:22:50 +02:00
…
2026-08-18 16:55:10 +02:00
2026-08-18 16:55:10 +02:00
…
…
…
2026-07-09 13:32:55 +02:00
…
2026-09-10 10:47:52 +02:00
2026-09-10 10:47:52 +02:00
…
…
2023-03-02 08:33:50 +01:00
2024-06-14 12:16:06 +02:00
…
…
2025-12-03 12:45:33 +01:00
…
…
2024-04-26 10:42:33 +02:00
…
…
2025-01-02 17:24:58 +01:00
2023-05-03 15:23:17 +02:00
…
…
…
2026-03-24 12:01:28 +01:00
2025-08-18 15:15:57 +02:00
…
2023-12-28 14:47:14 +01:00
2023-07-21 09:47:16 +02:00
2024-04-19 10:48:35 +02:00
…
2026-06-13 15:32:02 +02:00
…
2023-04-08 17:27:53 +02:00
…
…
2023-08-07 11:21:42 +02:00
…
2022-01-21 11:04:16 +01:00
2022-01-21 11:04:16 +01:00
2022-01-21 11:04:16 +01:00
…
…
…
…
…
2023-09-13 21:05:54 +02:00
2023-05-30 21:49:20 +02:00
2023-12-15 13:48:36 +01:00
2025-06-13 09:18:58 +02:00
…
2025-08-08 09:29:49 +02:00
…
…
2023-04-08 17:27:53 +02:00
…
2023-06-28 08:59:50 +02:00
2023-10-02 19:29:54 +02:00
2023-10-03 09:53:21 +02:00
2023-10-03 09:53:21 +02:00
…
2025-04-15 18:05:51 +02:00
2025-04-15 18:05:51 +02:00
2026-07-23 14:03:34 +02:00
2023-10-02 19:29:54 +02:00
2023-08-07 11:21:42 +02:00
2026-09-04 12:06:01 +02:00
2026-09-04 12:06:01 +02:00
…
…
…
2023-04-19 21:25:43 +02:00
…
2022-06-14 16:43:59 +02:00
…
2024-11-15 11:59:27 +01:00
…
…
…
…
2026-10-03 10:45:28 +02:00
2024-02-11 17:01:19 +01:00
…
…
…
2023-04-25 10:36:52 +02:00
…
…
2026-02-23 09:47:51 +01:00
2026-02-23 09:47:51 +01:00
2026-02-23 09:47:51 +01:00
2026-02-23 09:47:51 +01:00
2026-02-23 09:47:51 +01:00
2026-02-23 09:47:51 +01:00
2026-02-23 09:47:51 +01:00
2026-02-23 09:47:51 +01:00
2026-02-23 09:47:51 +01:00
2026-02-23 09:47:51 +01:00
2026-02-23 09:47:51 +01:00
2026-02-23 09:47:51 +01:00