Download the PHP package sinemacula/coding-standards without Composer

On this page you can find all versions of the php package sinemacula/coding-standards. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package coding-standards

Coding Standards

Latest Stable Version npm Version Maintainability Code Coverage Total Downloads

Centralized coding standards, static analysis configurations, and code quality tooling for all Sine Macula repositories.

This package ships config files only - no runtime dependencies. Consuming projects install the tools themselves.

Installation

Composer (PHP-side: PHP CS Fixer, PHPStan, PHPCS)

npm (JS-side: Biome, Knip)

The npm package ships only the static configs (js/, markdown/, yaml/, shell/, security/). The PHP autoloaded code lives in the Composer package.

Usage

Each consuming project creates thin wrapper files at its root that reference the shared configs.

PHP CS Fixer

Create a .php-cs-fixer.dist.php at your project root:

You can pass rule overrides as a second argument:

PHPCS

The SineMacula coding standard is auto-discovered via the phpcodesniffer-standard composer type. Create a phpcs.xml at your project root:

PHPStan

The shared PHPStan configs are auto-included via the extra.phpstan.includes section in composer.json. Your project's phpstan.neon only needs project-specific settings:

Laravel projects

For Laravel projects, also install sinemacula/coding-standards-laravel and reference its SineMaculaLaravel PHPCS standard (which includes this one) in place of SineMacula. It adds the Laravel-specific sniffs and PHPStan rules; see that package's README for setup.

Biome (JavaScript / TypeScript)

After installing the npm package, extend the shared Biome config from your project's biome.json (or .qlty/configs/biome.json when wired through Qlty):

extends paths are resolved through normal Node module lookup, so the package only needs to be installed (no path math against node_modules/ required). Project-specific files.includes and files.excludes stay in the consumer config.

ESLint (JavaScript / TypeScript)

ESLint runs alongside Biome, not in place of it. Biome keeps owning formatting and the fast syntactic lint; ESLint adds only the two things Biome structurally cannot express: this package's custom structural rules and the opt-in type-aware rules (the curated typescript-eslint set plus the type-driven custom rules). Add the linter, the typescript-eslint tooling, and this package to your dev dependencies:

The package exposes three flat-config entry points:

Create an eslint.config.js (or .qlty/configs/eslint.config.js when wired through Qlty) that spreads the layer you want. Without a tsconfig, use the base layer:

Where a tsconfig exists, use the type-aware layer instead (it already carries the base rules):

Vue repositories add the Vue toolchain and spread the Vue layer after the layer they already use:

The Vue layer registers the single-file-component parser (without it .vue files are not linted at all), resolves <script lang="ts"> blocks through the TypeScript parser, and holds component filenames to kebab-case. It also carries the template layout rules, which is the one place ESLint takes on formatting: Biome does not understand single-file components, so .vue markup would otherwise go unformatted entirely. Those rules are aligned to the shared four-space indent.

When wiring ESLint through Qlty, the shared eslint plugin sandbox installs only eslint, jest, and prettier by default, so the flat config's imports of this package and typescript-eslint fail to resolve. Widen the install filter in your .qlty/qlty.toml so the sandbox carries them (this repository's source.toml exports the same override, but source-exported plugin definitions do not reliably propagate, so mirror it consumer-side):

Repositories enabling the Vue layer widen the same filter further, since its plugins have to resolve inside that sandbox too:

Knip (JavaScript / TypeScript)

Qlty

Reference this repository as a source in your project's .qlty/qlty.toml, pinning tag to the latest release:

What's Included

Path Tool Description
src/PhpCsFixerConfig.php PHP CS Fixer Factory class for building PHP CS Fixer configurations
php/.php-cs-fixer.rules.php PHP CS Fixer Shared rules array (PSR-12 base + org conventions)
SineMacula/ruleset.xml PHPCS Auto-discovered coding standard (PSR-12 + exclusions)
php/phpstan-base.neon PHPStan Base config (org-wide ignored errors + settings)
js/biome.json Biome JavaScript / TypeScript formatter + linter rules
js/knip.json Knip Unused-export detection rules
js/eslint/ ESLint Structural, type-aware + Vue rules; runs with Biome
markdown/.markdownlint.json markdownlint Markdown linting rules
yaml/.yamllint.yaml yamllint YAML linting rules
shell/.shellcheckrc ShellCheck Shell script linting rules
security/.gitleaks.toml Gitleaks Secret-detection ruleset
editorconfig/.editorconfig-checker.json editorconfig-checker Disables only the max-line-length check

Rules

These are the custom rules this package enforces on top of PSR-12. A deliberate exception can be bypassed with the native directive - // phpcs:ignore <code> for a sniff, @phpstan-ignore <identifier> for a rule, // eslint-disable-next-line <rule> for an ESLint rule.

PHPCS sniffs

Sniff Enforces
SineMacula.Attributes.DisallowToolingAttribute No IDE/tooling attributes (e.g. JetBrains\PhpStorm).
SineMacula.Classes.RequireFinalClass Concrete classes must be final or abstract (@inheritable opts out).
SineMacula.Classes.RequireReadonlyPublicProperty Public properties (declared or promoted) must be readonly.
SineMacula.Commenting.CommentLineLength Standalone comment lines must not exceed 80 chars (FQCN/URL exempt).
SineMacula.Commenting.ConsistentEnumCaseComments Enum case docs are all-or-nothing within an enum.
SineMacula.Commenting.MultilineMethodComment A method's doc comment must span multiple lines.
SineMacula.Commenting.RequireConstantComment Every class/interface/enum/trait constant needs a doc comment.
SineMacula.Commenting.RequireCopyrightTag Class/interface/enum/trait docblocks must carry an @copyright tag.
SineMacula.Commenting.RequireNonPromotedParameterComment Plain params mixed with promoted ones need a comment.
SineMacula.Commenting.RequirePromotedPropertyComment Every constructor-promoted property needs a doc comment.
SineMacula.Commenting.SingleLineMemberComment A property, constant or enum-case doc comment sits on one line.
SineMacula.Exceptions.DisallowBaseException No throwing the base \Exception; throw a domain exception.
SineMacula.Exceptions.RequireEmptyCatchComment An empty catch block must comment its intentional swallow.
SineMacula.Functions.RequireSensitiveParameter Secret-named params need #[\SensitiveParameter].
SineMacula.Metrics.MaxMethodCount A class/interface/trait/enum may declare at most 20 methods (tests exempt).
SineMacula.Metrics.MethodLength A method body may have at most 50 significant lines (tests exempt).
SineMacula.Namespaces.RequireConcernsNamespace Traits must live under a Concerns namespace segment.
SineMacula.Namespaces.RequireContractsNamespace Interfaces must live under a Contracts namespace segment.
SineMacula.Namespaces.RequireEnumsNamespace Enums must live under an Enums namespace segment.
SineMacula.NamingConventions.BooleanMethodName bool methods are predicates; command verbs/@imperative exempt.
SineMacula.NamingConventions.DisallowInterfacePrefix Interface names must not use the Hungarian I prefix.
SineMacula.NamingConventions.ValidEnumCaseName Enum cases must be SCREAMING_SNAKE_CASE.
SineMacula.NamingConventions.ValidGlobalFunctionName Global functions must be declared in snake_case.
SineMacula.TypeHints.RequireConstantType Class/interface/enum/trait constants must declare a native type.
SineMacula.WhiteSpace.PromotedConstructorSpacing Blank line above each promoted-constructor parameter.

PHPStan rules

Identifier Enforces
sineMacula.mutableStaticProperty Static properties written at runtime; @managed-static opts out.

ESLint rules

All rules run in the base layer except boolean-method-name, which resolves return types and so requires the opt-in type-checked layer.

Rule Enforces
@sinemacula/no-interface-prefix Interface and type-alias names must not use the Hungarian I prefix.
@sinemacula/require-readonly-public-property Public class properties (declared or promoted) must be readonly.
@sinemacula/valid-enum-member-name Enum members must be declared in SCREAMING_SNAKE_CASE.
@sinemacula/boolean-method-name Boolean-returning methods need an is/has/can prefix; @imperative exempt.
@sinemacula/no-mutable-static No mutable exported bindings or mutable static class fields; test code exempt.
@sinemacula/max-methods-per-class A single class may declare at most 20 methods; test code exempt.
@sinemacula/no-base-error Throw a domain-specific Error subclass, never the base Error; test code exempt.
@sinemacula/require-copyright Every file must carry a documentation comment with @copyright and @author.
@sinemacula/align-doc-tags @author and @copyright values line up at a single column; autofixable.
@sinemacula/single-line-property-doc A data member's documentation comment sits on one line; autofixable.
@sinemacula/multiline-function-doc A method's documentation comment spans multiple lines; autofixable.

boolean-method-name takes additionalPrefixes, additionalPredicates and additionalCommandVerbs (string arrays) to widen the accepted vocabulary from a consumer config. max-methods-per-class takes max, no-base-error takes allow, and require-copyright takes tags to adjust their defaults. align-doc-tags takes tags and column, the column counting from the @, so the default of 14 gives @author six spaces and @copyright three. Together single-line-property-doc and multiline-function-doc set a member's comment shape by its kind: data members (interface property signatures, enum members and data class fields) take one line, while methods, interface method signatures and class fields holding a function take several. A data comment is never required, only held to one line where present; a free function keeps the freedom of either shape.

The base layer also switches on a set of built-in rules: @typescript-eslint/no-explicit-any, max-lines-per-function (50 lines, test code exempt) and max-depth (4), plus eslint-plugin-jsdoc rules that require a documentation comment on every declared function, method, class, interface member and class field, forbid types in @param/@returns (the tags themselves are welcome, types belong in the signature) and keep a blank line above every documentation block, single-line blocks included. The type-checked layer adds @typescript-eslint/explicit-module-boundary-types and @typescript-eslint/only-throw-error.

Requirements

Testing

Changelog

See CHANGELOG.md for a list of notable changes.

Contributing

Contributions are welcome. Please read CONTRIBUTING.md for guidelines on branching, commits, code quality, and pull requests.

Security

If you discover a security vulnerability, please report it responsibly. See SECURITY.md for the disclosure policy and contact details.

License

Licensed under the Apache License, Version 2.0.


All versions of coding-standards with dependencies

PHP Build Version
Package Version
Requires php Version ^8.3
friendsofphp/php-cs-fixer Version ^3.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package sinemacula/coding-standards contains the following files

Loading the files please wait ...