| vite-plugin | by dg | added CLAUDE.md | | | |
| vite-plugin | by jeremy-step | added host option and normalized dev server URL (#2) Adds a `host` plugin option to override the Vite server host, and normalizes `host: true` / '0.0.0.0' to 'localhost' in the generated nette.json (http://0.0.0.0 otherwise redirects to localhost for every asset). Port 80 is omitted from the URL, and a custom host is added to `allowedHosts` for proxied/Docker development. Reworked from #2 onto current master. Closes #1. | | | |
| vite-plugin | by dg | updated github actions | | | |
| claude-code | by dg | Released version 1.1.0 | | | |
| claude-code | by dg | added JSON validation hook using bundled seld/jsonlint PHP's json_decode() reports only "Syntax error" without a line and rejects the comments and trailing commas that JSONC files (tsconfig.json, jsconfig.json, .vscode/*.json, *.jsonc) legitimately contain. The new lint-json hook validates via the bundled seld/jsonlint parser (the one Composer uses), which reports "Parse error on line N" with a caret and accepts comments; trailing commas are stripped for JSONC files while preserving line offsets. Extra JSONC files can be marked via the "jsonc" list in .nette-claude.json. | | | |
| claude-code | by dg | added PHP syntax validation hook and guarded the style fixer against invalid PHP | | | |
| claude-code | by dg | added per-project path exclusion for plugin hooks Hooks (fix-php-style, lint-latte, lint-neon, lint-js) now read an optional .nette-claude.json, looked up upwards from the edited file, and skip paths listed under each hook's "exclude". Shared logic lives in the new plugins/shared/hook-config.php, required by all four hooks (fail-open if missing). Patterns are gitignore-like: a slashless pattern matches a segment at any depth, a pattern with a slash (or a leading slash) is anchored to the config directory. Also fixes an outdated hook path in tests/fix-php-style.phpt. | | | |
| claude-code | by dg | extracted validation hooks into a separate nette-lint plugin | | | |
| phpstan-rules | by dg | added CLAUDE.md | | | |
| eslint-plugin | by dg | added CLAUDE.md | | | |
| eslint-plugin | by dg | added support for JSX/TSX files | | | |
| eslint-plugin | by dg | released version 0.3.0 | | | |
| eslint-plugin | by dg | added missing dependency, removed dead code | | | |
| eslint-plugin | by dg | latte processor: use unique placeholders for expression tags Code like `if ({$x}) {} else if ({$b}) {}` was replaced with `if ([]) {} else if ([]) {}`, which ESLint reported as a duplicate condition error. Using unique placeholders `[1]`, `[2]`, etc. avoids these false positives. Counter resets at the start of each preprocess() call. | | | |
| eslint-plugin | by dg | .gitignore: added package-lock.json | | | |
| eslint-plugin | by dg | added support for ESLint 10 | | | |
| phpstan-rules | by dg | nette/database row type narrowing (table/related/ref/insert) Narrows return types based on a configurable table-to-entity-class mapping (nette.database.mapping.tables), which is not yet part of the nette/database distribution. Kept as the topmost commit so the whole feature can be excluded or rebased independently. Includes: - TableRowTypeResolver shared resolver - Explorer::table() -> Selection<EntityRow> - ActiveRow::related() -> GroupedSelection<EntityRow> - ActiveRow::ref() -> ?EntityRow - Selection::insert() -> mapped EntityRow | | | |
| phpstan-rules | by dg | RethrowAbortExceptionRule: don't report a dedicated catch (AbortException) A catch that explicitly names AbortException (or a subtype) is a deliberate swallow, e.g. Presenter::run() ending the lifecycle. Only broad catches (\Throwable, \Exception) that swallow it incidentally are reported now. | | | |
| mcp-inspector | by dg | added Tracy Logger WIP | | | |
| mcp-inspector | by dg | added built-in toolkits [WIP] | | | |
| mcp-inspector | by dg | added built-in DI toolkit | | | |
| mcp-inspector | by dg | added inspector | | | |
| code-checker | by dg | added CLAUDE.md | | | |
| code-checker | by dg | Released version 3.4.0 | | | |
| code-checker | by dg | improved readme.md | | | |
| code-checker | by dg | removed shortArraySyntaxFixer, invalidDoubleQuotedStringChecker, trailingPhpTagRemover This is now handled by the nette/coding-standard package. | | | |
| code-checker | by dg | strict_types check is now default behavior The --strict-types option is removed from documentation. Its presence is silently ignored for backward compatibility. | | | |
| code-checker | by dg | auto-disable progress indicator when not running in a terminal | | | |
| code-checker | by dg | fixed --short-arrays options requiring argument | | | |
| phpstan-rules | by dg | warn when catch swallows Nette\Application\AbortException New RethrowAbortExceptionRule flags the common presenter bug where a broad catch (\Throwable)/catch (\Exception) swallows an AbortException thrown by redirect()/forward()/terminate(), silently breaking the redirect. It fires only when the try block can actually throw AbortException (detected via method getThrowType()) and the first matching catch does not rethrow. Carving out a catch (AbortException) { throw; } before the broad catch silences it. Enabled by default. | | | |
| phpstan-rules | by dg | narrow match subject string after Strings::match/matchAll New StringsMatchTypeSpecifyingExtension narrows the subject of a successful Strings::match()/matchAll() call inside a truthy context, e.g. `if (Strings::match($s, '#\d+#'))` makes $s a non-empty-string. Delegates to RegexArrayShapeMatcher::matchSubjectExpr(). | | | |
| phpstan-rules | by dg | infer $matches type in Strings::replace() callback from regex New StringsReplaceClosureTypeExtension derives the exact capture-group shape of the $matches argument of a Strings::replace() callback from the constant pattern, via RegexArrayShapeMatcher. Falls back to no inference for non-constant patterns/flags. NativeParameterReflection is internal phpstan API, so phpstanApi.constructor is ignored for this file. | | | |