Commit graph

3 commits

Author SHA1 Message Date
Claude
5ff4375603
feat(code-reviewer): wire Java into analyzer + complete the refactor
Builds on @mitnick2012's universal+per-language restructure (PR #742).

- Add Java as a first-class deterministic language in code_quality_checker.py
  (LANGUAGE_EXTENSIONS + function/class/method patterns + check_java_specific_smells),
  so the documented `--language java` command works instead of erroring on an
  invalid choice. Add Java debug + @SuppressWarnings signals to pr_analyzer.py.
- Add Java regression fixtures (sample_java_smells/clean.java) with committed
  expected_outputs JSON, mirroring the existing C# fixtures.
- Delete references/{code_review_checklist,coding_standards,common_antipatterns}.md,
  now duplicated by rules/universal.md + languages/*.md; repoint README and the
  C# clean fixture header at the new structure.
- Document the optional analyzer-wiring + fixture steps in the "Adding a New
  Language" guide and restore a Regression Fixtures section in SKILL.md.

https://claude.ai/code/session_01DjuELpoFdFbFscr3kAatni
2026-05-26 14:02:19 +00:00
Claude
f5f6ee46bf
feat(code-reviewer): deliver C# / .NET implementation behind PR #723 docs
PR #723 added C# / .NET claims to SKILL.md but did not update the scripts
or references. This wires up the actual implementation so the documented
behavior matches reality.

scripts/code_quality_checker.py:
- add "csharp": [".cs", ".csx", ".razor", ".cshtml"] to LANGUAGE_EXTENSIONS
  (fixes argparse error on --language csharp)
- add C# function, class, and method regex patterns
- add check_csharp_specific_smells(): async void, blocking on Task
  (.Result/.Wait/.GetAwaiter().GetResult()), swallowed Exception,
  undisposed IDisposable, new HttpClient() in method body, missing
  await on *Async() calls, unused using directives

scripts/pr_analyzer.py:
- extend hardcoded_secrets to catch connection strings
- extend console_log to catch Debug.WriteLine
- extend disable_eslint -> analyzer_disable to catch #pragma warning
  disable and [SuppressMessage]
- extend any_type -> loose_type to catch C# dynamic
- extend sql_concatenation to catch FromSql/ExecuteSql interpolation
- add csharp_unsafe_block (both block and modifier forms)
- add csharp_null_forgiving (!. operator overuse)
- add csharp_async_void
- add csharp_blocking_async

references/coding_standards.md:
- add C# / .NET Standards section: nullable reference types,
  async/await, exception handling, IDisposable, LINQ, dependency
  injection, records + pattern matching, ASP.NET Core security

references/common_antipatterns.md:
- add C# / .NET Antipatterns section: async void, blocking on async,
  swallowing Exception, undisposed IDisposable, new HttpClient() in
  method, missing ConfigureAwait in libraries, mutable public setters,
  dynamic overuse, unjustified analyzer suppression

SKILL.md: add trailing newline (fixes "No newline at end of file" warning).

Verified: code_quality_checker fires all 8 documented C# smell categories
on a fixture; pr_analyzer fires all 8 risk patterns on the same diff;
Python and TypeScript regression checks pass.
2026-05-23 01:35:06 +00:00
Reza Rezvani
1851c8fb09 fix(plugins): restructure 9 multi-skill domain plugins into ./skills/ layout
Same root cause as #587/#591 — Claude Code's runtime loader rejects
array-form skills paths like ["./content-production", "./ai-seo", ...]
even when each entry is a valid subdirectory containing SKILL.md.
`claude plugin validate` accepts them but the loader does not.

The proven canonical layout (used by self-improving-agent in #536):

  <plugin>/
  ├── .claude-plugin/plugin.json    skills: "./skills"
  └── skills/
      ├── <skill-1>/SKILL.md
      ├── <skill-2>/SKILL.md
      └── ...

Restructured 9 multi-skill domain plugins:
- business-growth (4 skills moved)
- c-level-advisor (28)
- engineering (36)
- engineering-team (32)
- finance (2)
- marketing-skill (43)
- product-team (12)
- project-management (8)
- ra-qm-team (13)

Also fixed standalone plugins that had root SKILL.md + ./skills/ subdir
(agenthub, autoresearch-agent, executive-mentor, playwright-pro). The
loader rejected them despite skills="./skills" because of the conflicting
root SKILL.md (compare self-improving-agent which works because PR #536
moved its root SKILL.md). Moved each root SKILL.md into ./skills/<name>/.

Restored standalone plugin folders to their original paths after the
multi-skill restructure swept them into parent skills/ directories
(marketplace.json source paths require original locations).

Removed 7 orphaned marketplace entries that pointed to skill folders
without their own plugin.json (content-creator, demand-gen,
fullstack-engineer, aws-architect, product-manager, scrum-master,
skill-security-auditor) — these were already non-functional.

Bumped patch versions on every changed plugin and synced
marketplace.json. Marketplace now lists 29 working plugins (down
from 36).

After merge: users run `/plugin marketplace update claude-code-skills`
followed by `/plugin update --all` to pick up the working layout.
2026-05-02 22:51:20 +02:00
Renamed from engineering-team/code-reviewer/scripts/pr_analyzer.py (Browse further)