# squizlabs/php_codesniffer architecture

> Architecture diagram of the GitHub repository squizlabs/php_codesniffer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/squizlabs/php_codesniffer
- Repository: https://github.com/squizlabs/php_codesniffer

## Overview

PHP_CodeSniffer analyzes PHP, JavaScript, and CSS files against configurable coding standards, reports violations, and can automatically fix fixable violations. The principal workflow is selecting files and rules, tokenizing source, running registered sniffs, then reporting findings or applying fixes. The tree and excerpts support the major stages and capabilities, but do not expose the full Runner, Reporter, or Fixer implementations; some internal wiring is therefore omitted. The standards directory represents the included rule sets rather than a single sniff.

Main entry points: [`src/Runner.php`](https://github.com/squizlabs/php_codesniffer/blob/master/src/Runner.php) (Runner), [`src/Files/File.php`](https://github.com/squizlabs/php_codesniffer/blob/master/src/Files/File.php) (Analysis file), [`src/Ruleset.php`](https://github.com/squizlabs/php_codesniffer/blob/master/src/Ruleset.php) (Ruleset), [`src/Files/FileList.php`](https://github.com/squizlabs/php_codesniffer/blob/master/src/Files/FileList.php) (File discovery)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_orchestration["Run orchestration"]
  node_runner["Runner<br/>[Runner.php]"]
  node_config["Run config<br/>[Config.php]"]
  node_ruleset["Ruleset<br/>[Ruleset.php]"]
  node_filelist["File discovery<br/>[FileList.php]"]
  node_filter["File filters<br/>[Filter.php]"]
end

subgraph group_analysis["Token analysis"]
  node_file["Analysis file<br/>[File.php]"]
  node_php["PHP tokenizer<br/>[PHP.php]"]
  node_js["JavaScript tokenizer<br/>[JS.php]"]
  node_css["CSS tokenizer<br/>[CSS.php]"]
  node_tokens["Token utilities<br/>[Tokens.php]"]
  node_sniffapi["Sniff API<br/>[Sniff.php]"]
  node_standards["Included standards"]
end

subgraph group_correction["Automatic correction"]
  node_fixer["Fixer<br/>[Fixer.php]"]
end

subgraph group_results["Reports and docs"]
  node_reporter["Reporter<br/>[Reporter.php]"]
  node_reports["Report formats<br/>[Report.php]"]
  node_generators["Standard docs<br/>[Generator.php]"]
end

node_developer(("Developer"))

node_developer -->|"invokes checks"| node_runner
node_developer -->|"invokes fixes"| node_fixer
node_runner -->|"reads options"| node_config
node_runner -->|"loads rules"| node_ruleset
node_runner -->|"selects files"| node_filelist
node_filelist -->|"filters paths"| node_filter
node_runner -->|"checks files"| node_file
node_file -->|"tokenizes PHP"| node_php
node_file -->|"tokenizes JavaScript"| node_js
node_file -->|"tokenizes CSS"| node_css
node_php -->|"uses token groups"| node_tokens
node_ruleset -->|"loads sniffs"| node_standards
node_standards -->|"implements rules"| node_sniffapi
node_runner -->|"collects results"| node_reporter
node_reporter -->|"renders findings"| node_reports
node_file -->|"applies changes"| node_fixer
node_developer -->|"generates docs"| node_generators

click node_runner "https://github.com/squizlabs/php_codesniffer/blob/master/src/Runner.php"
click node_config "https://github.com/squizlabs/php_codesniffer/blob/master/src/Config.php"
click node_ruleset "https://github.com/squizlabs/php_codesniffer/blob/master/src/Ruleset.php"
click node_filelist "https://github.com/squizlabs/php_codesniffer/blob/master/src/Files/FileList.php"
click node_filter "https://github.com/squizlabs/php_codesniffer/blob/master/src/Filters/Filter.php"
click node_file "https://github.com/squizlabs/php_codesniffer/blob/master/src/Files/File.php"
click node_php "https://github.com/squizlabs/php_codesniffer/blob/master/src/Tokenizers/PHP.php"
click node_js "https://github.com/squizlabs/php_codesniffer/blob/master/src/Tokenizers/JS.php"
click node_css "https://github.com/squizlabs/php_codesniffer/blob/master/src/Tokenizers/CSS.php"
click node_tokens "https://github.com/squizlabs/php_codesniffer/blob/master/src/Util/Tokens.php"
click node_sniffapi "https://github.com/squizlabs/php_codesniffer/blob/master/src/Sniffs/Sniff.php"
click node_standards "https://github.com/squizlabs/php_codesniffer/tree/master/src/Standards"
click node_fixer "https://github.com/squizlabs/php_codesniffer/blob/master/src/Fixer.php"
click node_reporter "https://github.com/squizlabs/php_codesniffer/blob/master/src/Reporter.php"
click node_reports "https://github.com/squizlabs/php_codesniffer/blob/master/src/Reports/Report.php"
click node_generators "https://github.com/squizlabs/php_codesniffer/blob/master/src/Generators/Generator.php"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_runner,node_config,node_ruleset,node_filelist,node_filter toneBlue
class node_file,node_php,node_js,node_css,node_tokens,node_sniffapi,node_standards toneAmber
class node_fixer toneMint
class node_reporter,node_reports,node_generators toneRose
class node_developer toneIndigo
```

## Components

### Run orchestration

- [Runner](https://github.com/squizlabs/php_codesniffer/blob/master/src/Runner.php): `src/Runner.php`
- [Run config](https://github.com/squizlabs/php_codesniffer/blob/master/src/Config.php): `src/Config.php`
- [Ruleset](https://github.com/squizlabs/php_codesniffer/blob/master/src/Ruleset.php): `src/Ruleset.php`
- [File discovery](https://github.com/squizlabs/php_codesniffer/blob/master/src/Files/FileList.php): `src/Files/FileList.php`
- [File filters](https://github.com/squizlabs/php_codesniffer/blob/master/src/Filters/Filter.php): `src/Filters/Filter.php`

### Token analysis

- [Analysis file](https://github.com/squizlabs/php_codesniffer/blob/master/src/Files/File.php): `src/Files/File.php`
- [PHP tokenizer](https://github.com/squizlabs/php_codesniffer/blob/master/src/Tokenizers/PHP.php): `src/Tokenizers/PHP.php`
- [JavaScript tokenizer](https://github.com/squizlabs/php_codesniffer/blob/master/src/Tokenizers/JS.php): `src/Tokenizers/JS.php`
- [CSS tokenizer](https://github.com/squizlabs/php_codesniffer/blob/master/src/Tokenizers/CSS.php): `src/Tokenizers/CSS.php`
- [Token utilities](https://github.com/squizlabs/php_codesniffer/blob/master/src/Util/Tokens.php): `src/Util/Tokens.php`
- [Sniff API](https://github.com/squizlabs/php_codesniffer/blob/master/src/Sniffs/Sniff.php): `src/Sniffs/Sniff.php`
- [Included standards](https://github.com/squizlabs/php_codesniffer/tree/master/src/Standards): `src/Standards`

### Automatic correction

- [Fixer](https://github.com/squizlabs/php_codesniffer/blob/master/src/Fixer.php): `src/Fixer.php`

### Reports and docs

- [Reporter](https://github.com/squizlabs/php_codesniffer/blob/master/src/Reporter.php): `src/Reporter.php`
- [Report formats](https://github.com/squizlabs/php_codesniffer/blob/master/src/Reports/Report.php): `src/Reports/Report.php`
- [Standard docs](https://github.com/squizlabs/php_codesniffer/blob/master/src/Generators/Generator.php): `src/Generators/Generator.php`

### Other components

- **Developer**

## Connections

- Developer → Runner: invokes checks
- Developer → Fixer: invokes fixes
- Runner → Run config: reads options
- Runner → Ruleset: loads rules
- Runner → File discovery: selects files
- File discovery → File filters: filters paths
- Runner → Analysis file: checks files
- Analysis file → PHP tokenizer: tokenizes PHP
- Analysis file → JavaScript tokenizer: tokenizes JavaScript
- Analysis file → CSS tokenizer: tokenizes CSS
- PHP tokenizer → Token utilities: uses token groups
- Ruleset → Included standards: loads sniffs
- Included standards → Sniff API: implements rules
- Runner → Reporter: collects results
- Reporter → Report formats: renders findings
- Analysis file → Fixer: applies changes
- Developer → Standard docs: generates docs
