Kun kirjoittaa WordPress-koodia, on hyvä käyttää phpcs:ää koko ajan valvomassa koodia virheiden varalta. WordPressin phpcs-säännöt eivät ehkä ole kaikkien makuun, mutta yhtenäisen WordPress-tyylin ylläpitäminen on mielestäni silti arvokasta.
Toisinaan phpcs valittaa kuitenkin asioista, joista valittaminen on tarpeetonta. Tavallisimmat turhat valitukset liittyvät tulostettavien asioiden escapeen – joka käyttöön ei ole sopivaa escape-funktiota ja jos jonkun sisällön tietää varmasti turvalliseksi, sitä on turha escapeta – ja tietokantakyselyihin, joissa omia muuttujia (esimerkiksi taulujen nimiä) upotetaan kyselyyn ilman preparea. Silloin tarvitaan phpcs:ignore
-ohjeistusta vaientamaan phpcs.
Jos haluaa olla täsmällinen ja sulkea pois vain tietyn virheen (eikä samalla vaientaa mahdollisia muita virheitä), pitää koko valituksen nimi kirjoittaa just eikä melkein, ja nimet ovat sen verran pitkiä, ettei niitä muista. Minua on myös ärsyttänyt, ettei VS Code (tai Tabnine) opi näitä itsestään ulkoa.
Hoksasin sitten, että niin, voinhan minä itsekin VS Codea opettaa. Tässä siis muistiin itselle ja hyödyksi muille joukko tavanomaisimpia ohitettavia sniffejä. Nämä voi lisätä VS Codeen Snippeteiksi, jolloin VS Code osaa ehdottaa näitä täydennyksiksi kun alkaa kirjoittamaan sniffin nimeä.
{ "EscapedOutput": { "scope": "php", "prefix": "outputnotescaped", "body": [ "// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped" ], "description": "Output not escaped" }, "UnsafePrintingFunctions": { "scope": "php", "prefix": "unsafeprinting", "body": [ "// phpcs:ignore WordPress.Security.EscapeOutput.UnsafePrintingFunction" ], "description": "Unsafe printing function" }, "NonceVerification": { "scope": "php", "prefix": "nonceverification", "body": [ "// phpcs:ignore WordPress.Security.NonceVerification" ], "description": "Nonce verification" }, "SafeRedirect": { "scope": "php", "prefix": "saferedirect", "body": [ "// phpcs:ignore WordPress.Security.SafeRedirect" ], "description": "Safe redirect" }, "InterpolatedNotPrepared": { "scope": "php", "prefix": "interpolatednotprepared", "body": [ "// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared" ], "description": "Interpolated & NotPrepared" }, "Interpolated": { "scope": "php", "prefix": "interpolated", "body": [ "// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared" ], "description": "Interpolated" }, "NotPrepared": { "scope": "php", "prefix": "notprepared", "body": [ "// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared" ], "description": "Not prepared" }, "NotPreparedDirectDatabase": { "scope": "php", "prefix": "notprepareddirectdatabase", "body": [ "// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery" ], "description": "Not prepared & Direct database query" }, "NotPreparedNoCaching": { "scope": "php", "prefix": "notpreparednocaching", "body": [ "// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching" ], "description": "Not prepared & No caching" }, "NotPreparedDirectDatabaseNoCaching": { "scope": "php", "prefix": "notprepareddirectdatabasenocaching", "body": [ "// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery" ], "description": "Not prepared & Direct database query & No caching" }, "GlobalVariablesOverride": { "scope": "php", "prefix": "globalvariablesoverride", "body": [ "// phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited" ], "description": "Global variable override" }, "AlternativeFunctions": { "scope": "php", "prefix": "alternativefunctions", "body": [ "// phpcs:ignore WordPress.WP.AlternativeFunctions" ], "description": "Alternative functions" }, "I18N": { "scope": "php", "prefix": "i18n", "body": [ "// phpcs:ignore WordPress.WP.I18n" ], "description": "I18N" }, "ValidVariableName": { "scope": "php", "prefix": "validvariablename", "body": [ "// phpcs:ignore WordPress.NamingConventions.ValidVariableName" ], "description": "Valid variable name" }, "UsedPropertyNotSnakeCase": { "scope": "php", "prefix": "usedpropertynotsnakecase", "body": [ "// phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase" ], "description": "Used property not SnakeCase" }, "FunctionNameInvalid": { "scope": "php", "prefix": "functionnameinvalid", "body": [ "// phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid" ], "description": "Function name invalid" }, "UseUnderscores": { "scope": "php", "prefix": "useunderscores", "body": [ "// phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores" ], "description": "Use underscores" }, "DiscouragedFunctions": { "scope": "php", "prefix": "discouragedfunctions", "body": [ "// phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions" ], "description": "Discouraged PHP functions" }, "DevelopmentFunctions": { "scope": "php", "prefix": "developmentfunctions", "body": [ "// phpcs:ignore WordPress.PHP.DevelopmentFunctions" ], "description": "Development functions" } }