Standar Pengkodean Slevomat
Slevomat Coding Standard untuk PHP_CodeSniffer menyediakan sniff yang terbagi dalam tiga kategori:
- Fungsional - meningkatkan keamanan dan perilaku kode
- Pembersihan - mendeteksi kode mati
- Pemformatan - aturan untuk tampilan kode yang konsisten
Daftar isi
- Daftar hirupan menurut abjad
- Instalasi
- Cara menjalankan sniff
- Pilih sniff mana yang akan dijalankan
- Kecualikan sniff yang tidak ingin Anda jalankan
- Memperbaiki kesalahan secara otomatis
- Menekan hirupan secara lokal
- Berkontribusi
Daftar hirupan menurut abjad
= Perbaikan kesalahan otomatis
= Pemeriksaan Sniff dapat dihentikan secara lokal
- SlevomatCodingStandard.Arrays.AlphabeticallySortedByKeys
- SlevomatCodingStandard.Arrays.DisallowImplicitArrayCreation
- SlevomatCodingStandard.Arrays.DisallowPartiallyKened
- SlevomatCodingStandard.Arrays.MultiLineArrayEndBracketPlacement
- SlevomatCodingStandard.Arrays.ArrayAccessSniff.php
- SlevomatCodingStandard.Arrays.SingleLineArrayWhitespace
- SlevomatCodingStandard.Arrays.TrailingArrayComma
- SlevomatCodingStandard.Attributes.AttributeAndTargetSpacing
- SlevomatCodingStandard.Attributes.AttributesOrder
- SlevomatCodingStandard.Attributes.DisallowAttributesBergabung
- SlevomatCodingStandard.Attributes.DisallowMultipleAttributesPerLine
- SlevomatCodingStandard.Attributes.RequireAttributeAfterDocComment
- SlevomatCodingStandard.Classes.BackedEnumTypeSpacing
- SlevomatCodingStandard.Classes.ClassConstantVisibility
- SlevomatCodingStandard.Classes.ClassLength
- SlevomatCodingStandard.Classes.ClassMemberSpacing
- SlevomatCodingStandard.Kelas.Struktur Kelas
- SlevomatCodingStandard.Classes.ConstantSpacing
- SlevomatCodingStandard.Classes.DisallowConstructorPropertyPromotion
- SlevomatCodingStandard.Classes.DisallowLateStaticBindingForConstants
- SlevomatCodingStandard.Classes.DisallowMultiConstantDefinition
- SlevomatCodingStandard.Classes.DisallowMultiPropertyDefinition
- SlevomatCodingStandard.Classes.DisallowStringExpressionPropertyFetch
- SlevomatCodingStandard.Classes.EmptyLinesAroundClassBraces
- SlevomatCodingStandard.Classes.EnumCaseSpacing
- SlevomatCodingStandard.Classes.ForbiddenPublicProperty
- SlevomatCodingStandard.Classes.MethodSpacing
- SlevomatCodingStandard.Classes.ModernClassNameReference
- SlevomatCodingStandard.Classes.ParentCallSpacing
- SlevomatCodingStandard.Classes.PropertyDeclaration
- SlevomatCodingStandard.Classes.PropertySpacing
- SlevomatCodingStandard.Classes.RequireAbstractOrFinal
- SlevomatCodingStandard.Classes.RequireConstructorPropertyPromotion
- SlevomatCodingStandard.Classes.RequireMultiLineMethodSignature
- SlevomatCodingStandard.Classes.RequireSelfReference
- SlevomatCodingStandard.Classes.RequireSingleLineMethodSignature
- SlevomatCodingStandard.Classes.SuperfluousAbstractClassNaming
- SlevomatCodingStandard.Classes.SuperfluousErrorNaming
- SlevomatCodingStandard.Classes.SuperfluousExceptionNaming
- SlevomatCodingStandard.Classes.SuperfluousInterfaceNaming
- SlevomatCodingStandard.Classes.SuperfluousTraitNaming
- SlevomatCodingStandard.Classes.TraitUseDeclaration
- SlevomatCodingStandard.Classes.TraitUseSpacing
- SlevomatCodingStandard.Classes.UselessLateStaticBinding
- SlevomatCodingStandard.Commenting.AnnotationName
- SlevomatCodingStandard.Commenting.DeprecatedAnnotationDeclaration
- SlevomatCodingStandard.Commenting.DisallowCommentAfterCode
- SlevomatCodingStandard.Commenting.DisallowOneLinePropertyDocComment
- SlevomatCodingStandard.Commenting.DocCommentSpacing
- SlevomatCodingStandard.Commenting.EmptyComment
- SlevomatCodingStandard.Commenting.ForbiddenAnnotations
- SlevomatCodingStandard.Commenting.ForbiddenComments
- SlevomatCodingStandard.Commenting.InlineDocCommentDeklarasi
- SlevomatCodingStandard.Commenting.RequireOneLineDocComment
- SlevomatCodingStandard.Commenting.RequireOneLinePropertyDocComment
- SlevomatCodingStandard.Commenting.UselessFunctionDocComment
- SlevomatCodingStandard.Commenting.UselessInheritDocComment
- SlevomatCodingStandard.Kompleksitas.Kognitif
- SlevomatCodingStandard.ControlStructures.AssignmentInCondition
- SlevomatCodingStandard.ControlStructures.BlockControlStructureSpacing
- SlevomatCodingStandard.ControlStructures.DisallowContinueWithoutIntegerOperandInSwitch
- SlevomatCodingStandard.ControlStructures.DisallowEmpty
- SlevomatCodingStandard.ControlStructures.DisallowNullSafeObjectOperator
- SlevomatCodingStandard.ControlStructures.DisallowShortTernaryOperator
- SlevomatCodingStandard.ControlStructures.DisallowTrailingMultiLineTernaryOperatorSniff
- SlevomatCodingStandard.ControlStructures.DisallowYodaComparison
- SlevomatCodingStandard.ControlStructures.EarlyExit
- SlevomatCodingStandard.ControlStructures.JumpStatementsSpacing
- SlevomatCodingStandard.ControlStructures.LanguageConstructWithParentheses
- SlevomatCodingStandard.ControlStructures.NewWithParenthesis
- SlevomatCodingStandard.ControlStructures.BaruTanpa Tanda Kurung
- SlevomatCodingStandard.ControlStructures.RequireMultiLineCondition
- SlevomatCodingStandard.ControlStructures.RequireMultiLineTernaryOperator
- SlevomatCodingStandard.ControlStructures.RequireNullCoalesceEqualOperator
- SlevomatCodingStandard.ControlStructures.RequireNullCoalesceOperator
- SlevomatCodingStandard.ControlStructures.RequireNullSafeObjectOperator
- SlevomatCodingStandard.ControlStructures.RequireShortTernaryOperator
- SlevomatCodingStandard.ControlStructures.RequireSingleLineCondition
- SlevomatCodingStandard.ControlStructures.RequireTernaryOperator
- SlevomatCodingStandard.ControlStructures.RequireYodaComparison
- SlevomatCodingStandard.ControlStructures.UselessIfConditionWithReturn
- SlevomatCodingStandard.ControlStructures.UselessTernaryOperator
- SlevomatCodingStandard.Exceptions.DeadCatch
- SlevomatCodingStandard.Exceptions.DisallowNonCapturingCatch
- SlevomatCodingStandard.Exceptions.ReferenceThrowableOnly
- SlevomatCodingStandard.Exceptions.RequireNonCapturingCatch
- SlevomatCodingStandard.Files.Panjang File
- SlevomatCodingStandard.Files.LineLength
- SlevomatCodingStandard.Files.TypeNameMatchesFileName
- SlevomatCodingStandard.Functions.ArrowFunctionDeclaration
- SlevomatCodingStandard.Functions.DisallowArrowFunction
- SlevomatCodingStandard.Functions.DisallowEmptyFunction
- SlevomatCodingStandard.Functions.DisallowNamedArguments
- SlevomatCodingStandard.Functions.DisallowTrailingCommaInCall
- SlevomatCodingStandard.Functions.DisallowTrailingCommaInClosureUse
- SlevomatCodingStandard.Functions.DisallowTrailingCommaInDeclaration
- SlevomatCodingStandard.Functions.FunctionLength
- SlevomatCodingStandard.Functions.NamedArgumentSpacing
- SlevomatCodingStandard.Functions.RequireArrowFunction
- SlevomatCodingStandard.Functions.RequireMultiLineCall
- SlevomatCodingStandard.Functions.RequireSingleLineCall
- SlevomatCodingStandard.Functions.RequireTrailingCommaInCall
- SlevomatCodingStandard.Functions.RequireTrailingCommaInClosureUse
- SlevomatCodingStandard.Functions.RequireTrailingCommaInDeclaration
- SlevomatCodingStandard.Fungsi.Penutupan Statis
- SlevomatCodingStandard.Functions.StrictCall
- SlevomatCodingStandard.Functions.UnusedInheritedVariablePassedToClosure
- SlevomatCodingStandard.Functions.UnusedParameter
- SlevomatCodingStandard.Functions.UselessParameterDefaultValue
- SlevomatCodingStandard.Namespaces.Penggunaan yang Diurutkan Berdasarkan Abjad
- SlevomatCodingStandard.Namespaces.DisallowGroupUse
- SlevomatCodingStandard.Namespaces.FullyQualifiedClassNameInAnnotation
- SlevomatCodingStandard.Namespaces.FullyQualifiedExceptions
- SlevomatCodingStandard.Namespaces.FullyQualifiedGlobalConstants
- SlevomatCodingStandard.Namespaces.FullyQualifiedGlobalFunctions
- SlevomatCodingStandard.Namespaces.MultipleUsesPerLine
- SlevomatCodingStandard.Namespaces.NamespaceDeclaration
- SlevomatCodingStandard.Namespaces.NamespaceSpacing
- SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly
- SlevomatCodingStandard.Namespaces.RequireOneNamespaceInFile
- SlevomatCodingStandard.Namespaces.Penggunaan yang Tidak Digunakan
- SlevomatCodingStandard.Namespaces.UseDoesNotStartWithBackslash
- SlevomatCodingStandard.Namespaces.UseFromSameNamespace
- SlevomatCodingStandard.Namespaces.UseOnlyWhitelistedNamespaces
- SlevomatCodingStandard.Namespaces.UseSpacing
- SlevomatCodingStandard.Namespaces.UselessAlias
- SlevomatCodingStandard.Numbers.DisallowNumericLiteralSeparator
- SlevomatCodingStandard.Numbers.RequireNumericLiteralSeparator
- SlevomatCodingStandard.Operators.DisallowEqualOperators
- SlevomatCodingStandard.Operators.DisallowIncrementAndDecrementOperators
- SlevomatCodingStandard.Operators.NegationOperatorSpacing
- SlevomatCodingStandard.Operators.RequireCombinedAssignmentOperator
- SlevomatCodingStandard.Operators.RequireOnlyStandaloneIncrementAndDecrementOperators
- SlevomatCodingStandard.Operators.SpreadOperatorSpacing
- SlevomatCodingStandard.PHP.DisallowDirectMagicInvokeCall
- SlevomatCodingStandard.PHP.DisallowReference
- SlevomatCodingStandard.PHP.Kelas Terlarang
- SlevomatCodingStandard.PHP.OptimizedFunctionsWithoutUnpacking
- SlevomatCodingStandard.PHP.ReferenceSpacing
- SlevomatCodingStandard.PHP.RequireExplicitAssertion
- SlevomatCodingStandard.PHP.RequireNowdoc
- SlevomatCodingStandard.PHP.Daftar Pendek
- SlevomatCodingStandard.PHP.TypeCast
- SlevomatCodingStandard.PHP.UselessParenthesis
- SlevomatCodingStandard.PHP.Titik koma yang tidak berguna
- SlevomatCodingStandard.Strings.DisallowVariableParsing
- SlevomatCodingStandard.TypeHints.DeclareStrictTypes
- SlevomatCodingStandard.TypeHints.DisallowArrayTypeHintSyntax
- SlevomatCodingStandard.TypeHints.DisallowMixedTypeHint
- SlevomatCodingStandard.TypeHints.LongTypeHints
- SlevomatCodingStandard.TypeHints.NullTypeHintOnLastPosition
- SlevomatCodingStandard.TypeHints.NullableTypeForNullDefaultValue
- SlevomatCodingStandard.TypeHints.ParameterTypeHint
- SlevomatCodingStandard.TypeHints.ParameterTypeHintSpacing
- SlevomatCodingStandard.TypeHints.PropertyTypeHint
- SlevomatCodingStandard.TypeHints.ReturnTypeHint
- SlevomatCodingStandard.TypeHints.ReturnTypeHintSpacing
- SlevomatCodingStandard.TypeHints.UnionTypeHintFormat
- SlevomatCodingStandard.TypeHints.UselessConstantTypeHint
- SlevomatCodingStandard.Variables.DisallowVariableVariable
- SlevomatCodingStandard.Variables.DisallowSuperGlobalVariable
- SlevomatCodingStandard.Variables.DuplikatAssignmentToVariable
- SlevomatCodingStandard.Variables.UnusedVariable
- SlevomatCodingStandard.Variables.UselessVariable
- SlevomatCodingStandard.Whitespaces.DuplikatSpaces
Instalasi
Cara yang disarankan untuk menginstal Slevomat Coding Standard adalah melalui Composer.
{
"require-dev" : {
"slevomat/coding-standard" : " ~8.0 "
}
}
Disarankan juga untuk menginstal php-parallel-lint/php-parallel-lint yang memeriksa kode sumber untuk kesalahan sintaksis. Sniff mengandalkan kode yang diproses valid secara sintaksis (tidak ada kesalahan penguraian), jika tidak, kode tersebut dapat berperilaku tidak terduga. Disarankan untuk menjalankan PHP-Parallel-Lint
di alat build Anda sebelum menjalankan PHP_CodeSniffer
dan keluar dari proses build lebih awal jika PHP-Parallel-Lint
gagal.
Cara menjalankan sniff
Anda dapat memilih salah satu dari dua cara untuk hanya menjalankan sniff yang dipilih dari standar pada basis kode Anda:
Pilih sniff mana yang akan dijalankan
Cara yang disarankan adalah menulis ruleset.xml Anda sendiri dengan hanya mereferensikan sniff yang dipilih. Ini adalah contoh ruleset.xml:
<? xml version = " 1.0 " ?>
< ruleset name = " AcmeProject " >
< config name = " installed_paths " value = " ../../slevomat/coding-standard " /> <!-- relative path from PHPCS source location -->
< rule ref = " SlevomatCodingStandard.Arrays.TrailingArrayComma " />
<!-- other sniffs to include -->
</ ruleset >
Kemudian jalankan phpcs
yang dapat dieksekusi dengan cara biasa:
vendor/bin/phpcs --standard=ruleset.xml --extensions=php --tab-width=4 -sp src tests
Kecualikan sniff yang tidak ingin Anda jalankan
Anda juga dapat menyebutkan Slevomat Coding Standard di ruleset.xml
proyek Anda dan hanya mengecualikan beberapa sniff:
<? xml version = " 1.0 " ?>
< ruleset name = " AcmeProject " >
< rule ref = " vendor/slevomat/coding-standard/SlevomatCodingStandard/ruleset.xml " > <!-- relative path to your ruleset.xml -->
<!-- sniffs to exclude -->
</ rule >
</ ruleset >
Namun ini bukan cara yang disarankan untuk menggunakan Slevomat Coding Standard, karena build Anda dapat rusak saat berpindah di antara versi minor standar (yang dapat terjadi jika Anda menggunakan batasan versi ^
atau ~
di composer.json
). Kami secara teratur menambahkan sniff baru bahkan dalam versi minor yang berarti kode Anda kemungkinan besar tidak akan mematuhi versi minor baru dari paket tersebut.
Memperbaiki kesalahan secara otomatis
Sniff dalam standar ini ditandai dengan simbol yang mendukung perbaikan otomatis pelanggaran standar pengkodean. Untuk memperbaiki kode Anda secara otomatis, jalankan phpcbf alih-alih phpcs:
vendor/bin/phpcbf --standard=ruleset.xml --extensions=php --tab-width=4 -sp src tests
Selalu ingat untuk membuat cadangan kode Anda sebelum melakukan perbaikan otomatis dan periksa sendiri hasilnya karena pemecah masalah otomatis terkadang dapat memberikan hasil yang tidak diinginkan.
Menekan hirupan secara lokal
Sniff yang dipilih dalam standar ini yang ditandai dengan simbol dapat disembunyikan untuk bagian kode tertentu menggunakan anotasi. Perhatikan contoh berikut:
/**
* @param int $max
*/
public function createProgressBar ( $ max = 0 ): ProgressBar
{
}
Parameter $max
dapat memiliki petunjuk ketik skalar int
asli. Tetapi karena metode di kelas induk tidak memiliki petunjuk pengetikan ini, maka metode ini juga tidak dapat memilikinya. PHP_CodeSniffer menunjukkan kesalahan berikut:
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
67 | ERROR | [x] Method ErrorsConsoleStyle::createProgressBar()
| | does not have native type hint for its parameter $max
| | but it should be possible to add it based on @param
| | annotation "int".
| | (SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint)
Jika kita ingin menyembunyikan kesalahan ini alih-alih memperbaikinya, kita dapat mengambil kode kesalahan ( SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
) dan menggunakannya dengan anotasi @phpcsSuppress
seperti ini:
/**
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
* @param int $max
*/
public function createProgressBar ( $ max = 0 ): ProgressBar
{
}
Berkontribusi
Agar repositori ini berfungsi di mesin Anda, kloning dan jalankan dua perintah berikut di direktori akar repositori:
composer install
bin/phing
Setelah menulis beberapa kode dan mengedit atau menambahkan unit test, jalankan php lagi untuk memeriksa apakah semuanya baik-baik saja:
Kami selalu menantikan laporan bug, permintaan fitur, dan permintaan penarikan Anda. Terima kasih.
Kode Etik
Proyek ini mematuhi Kode Etik Kontributor. Dengan berpartisipasi dalam proyek ini dan komunitasnya, Anda diharapkan menjunjung tinggi kode ini.