Variablen Naming Check

Einleitung

Mit dem Naming Check kann die Namenskonvention von Variablen überprüft werden.

z.B.: Hungarian notation [{prefix}] {datatype} {identifier}

float fRadius;
bool bDoor;
global int g_iThreadId;
const int ICOUNT;

Verwendung

Standardmäßig werden die vom Add-On bereitgestellten Regeln verwendet.

Es ist aber auch möglich, diese Regeln zu ändern oder eigene Regeln für diese Prüfung zu erstellen. Siehe "Erstellen Sie Ihre eigene Regeldatei".

Regel Defintion

Eine Regeldatei besteht aus mehreren Regel-Tags. Jede Regel besteht aus einem Muster und einer Nachricht mit ID und Zusammenfassung.

<rule version="1">
    <pattern>^[A-Z0-9_]+$</pattern>
    <message>
        <id>const</id>
        <summary>The varibale name can not consist of lowercase letters.</summary>
    </message>
</rule>

Ausdruck (pattern)

Definiert einen regulären Ausdruck, der auf den Variablennamen angewendet wird. Wenn der Ausdruck nicht übereinstimmt, wird ein Fehler zurückgegeben.

Beispiel regulärer Ausdruck

    <pattern>^[A-Z0-9_]+$</pattern>

Erläuterung

Beispiel regulärer Ausdruck(Source https://regexr.com/)

^ Beginning. Matches the beginning of the string, or the beginning of a line if the multiline flag (m) is enabled.
[ Character set. Match any character in the set.
A-Z Range. Matches a character in the range "A" to "Z" (char code 65 to 90). Case sensitive.
0-9 Range. Matches a character in the range "0" to "9" (char code 48 to 57). Case sensitive.
_ Character. Matches a "_" character (char code 95).
]  
+ Quantifier. Match 1 or more of the preceding token.
$ End. Matches the end of the string, or the end of a line if the multiline flag (m) is enabled.

Ergebnis

Ausdruck Variablen Typ und Name Check
^[A-Z0-9_]+$ const I_VAR OK
^[A-Z0-9_]+$ const i_VAR NOK
^[A-Z0-9_]+$ const I_Va NOK

Spezielles Muster für reguläre Ausdrücke

Mit diesen speziellen Mustern können Sie prüfen, ob der Variablenname spezielle Informationen enthält. Mehr von ihnen werden kommen ...

Muster Beispiel
%fileName% b_aesAutoRestart
%fileName_allUpper% b_AESAutoRestart
%fileName_allLower% b_aesAutoRestart

Zusammenfassung (summary)

Definiert die Nachricht, die ausgegeben wird, wenn der reguläre Ausdruck nicht übereinstimmt.

Id (id)

Die ID gibt an, auf welche Variablen der reguläre Ausdruck angewendet werden soll. Jede Variable hat einen Typ und ist für einen bestimmten Bereich verfügbar. Darüber hinaus kann es durch bestimmte Schlüsselwörter wie const modifiziert werden.

Für den Überprüfungsprozess werden die Kategorien jeder Variablen automatisch vom Tool bestimmt.

Die ID ist in folgende Kategorien unterteilt:

<modifier (const | nonconst)> <type (siehe Liste unten)> <scope (local | argument | global)> 

e.g. <id>const int argument</id>

Modifikator* (modifier)

Spezielles Schlüsselwort für detaillierte Analysen

  • const
  • nonconst

Typ (type)

Siehe Liste der unterstützten Typen im folgenden Dokument

Bereich* (scope)

Bereich, in dem die Variable verwendet wird

  • global - Script / library global;
  • argument - In einer Funktionsdeklaration enthalten, z.B.: funcA(string sVar1, string sVar2, ...)
  • local - Alle anderen

Für type und *scope kann nur ein Wert definiert werden.

Entweder müssen alle drei Wertekategorien definiert werden oder nur für eine.

Überprüfungsprozess

  1. Es wird nach den Regeln gesucht, ob es eine perfekte Übereinstimmung für eine ID gibt.

Beispiel für eine const int -Variable in einem global Bereich, wenn eine genau Regel verfügbar ist:

const global int g_IAES_VAR
<rule version="1">
    <pattern> ... </pattern>
    <message>
        <id>const int global</id>
        <summary> ... </summary>
    </message>
</rule>

Diese Regel wird überprüft, da alle 3 Kategorien übereinstimmen.

  1. Wenn keine dedizierte Regel gefunden wird, werden die Kategorien aufgeteilt und die für jede Kategorie gefundenen Regeln werden einzeln überprüft. Wenn für eine Kategorie keine Regel gefunden wird, wird diese nicht überprüft.

Beispiel für eine const int -Variable in einem global Bereich, wenn keine genaue Regel verfügbar ist:

const global int g_IAES_VAR
<rule version="1">
    <pattern> ... </pattern>
    <message>
        <id>const</id>
        <summary> ... </summary>
    </message>
</rule>
<rule version="1">
    <pattern> ... </pattern>
    <message>
        <id>int</id>
        <summary> ... </summary>
    </message>
</rule>
<!-- A rule for "global" couldn't be found. -->

Die beiden bestehenden Regeln werden angewendet.

Achtung

Aufgrund dieser Logik ist es erforderlich, dass die einzelnen Kategorieregeln miteinander kombiniert werden können. Sonst würde es immer zu gewissen Kombinationsfehlern kommen.

Beispiele:

ID Ausdruck const int local const int local (nonconst) int global (nonconst) int global
Variablen Name IAES_VAR iAES_VAR g_i_CountFlags i_CountFlags
const ^[A-Z0-9_]+$ OK NOK ignored ignored
int ^[iI].* OK OK OK OK
float ^[fF].* ignored ignored ignored ignored
local "(.)(%fileName%_)(.)" OK OK ignored ignored
global ^[gG].* ignored ignored OK NOK
Total OK NOK OK NOK

Erstellen Sie Ihre eigene Regeldatei

Wenn eine eigene Regeldatei erforderlich ist, kann diese mit der Befehlszeilenoption "--naming-rule-file =" angegeben werden.


Die folgenden Werte sind derzeit für die type Kategorie verfügbar:

Types:

  • anytype
  • atime
  • bit32
  • bit64
  • blob
  • bool
  • char
  • double
  • errClass
  • file
  • float
  • function_ptr
  • int
  • uint
  • long
  • ulong
  • langString
  • mixed
  • mapping
  • va_list
  • string
  • time
  • unsigned
  • dbRecordset
  • dbConnection
  • dbCommand
  • shape
  • idispatch

dyn variables

  • dyn_anytype
  • dyn_atime
  • dyn_bit32
  • dyn_bit64
  • dyn_blob
  • dyn_bool
  • dyn_char
  • dyn_errClass
  • dyn_float
  • dyn_int
  • dyn_uint
  • dyn_long
  • dyn_ulong
  • dyn_langString
  • dyn_mapping
  • dyn_string
  • dyn_time
  • dyn_shape

dyn_dyn variables

  • dyn_dyn_anytype
  • dyn_dyn_atime
  • dyn_dyn_bit32
  • dyn_dyn_bit64
  • dyn_dyn_bool
  • dyn_dyn_char
  • dyn_dyn_errClass
  • dyn_dyn_float
  • dyn_dyn_int
  • dyn_dyn_uint
  • dyn_dyn_long
  • dyn_dyn_ulong
  • dyn_dyn_langString
  • dyn_dyn_string
  • dyn_dyn_time

results matching ""

    No results matching ""