1. Enable naming convention check for #ifndef/#define/typedef statement
authorhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 25 Mar 2008 05:54:39 +0000 (05:54 +0000)
committerhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 25 Mar 2008 05:54:39 +0000 (05:54 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1087 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/Ecc/Check.py

index 09f47e8..0fe5383 100644 (file)
@@ -36,6 +36,7 @@ class Check(object):
         self.IncludeFileCheck()\r
         self.PredicateExpressionCheck()\r
         self.DeclAndDataTypeCheck()\r
+        self.NamingConventionCheck()\r
     \r
     #\r
     # Declarations and Data Types Checking\r
@@ -511,19 +512,46 @@ class Check(object):
     # Check whether only capital letters are used for #define declarations\r
     #\r
     def NamingConventionCheckDefineStatement(self):\r
-        pass\r
+        if EccGlobalData.gConfig.NamingConventionCheckDefineStatement == '1' or EccGlobalData.gConfig.NamingConventionCheckAll == '1':\r
+            EdkLogger.quiet("Checking naming covention of #define statement ...")\r
+            for IdentifierTable in EccGlobalData.gIdentifierTableList:\r
+                SqlCommand = """select ID, Value from %s where Model = %s""" %(IdentifierTable, MODEL_IDENTIFIER_MACRO_DEFINE)\r
+                RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)\r
+                for Record in RecordSet:\r
+                    Name = Record[1].strip().split()[1]\r
+                    Name = Name[0:Name.find('(')]\r
+                    if Name.upper() != Name:\r
+                        EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_DEFINE_STATEMENT, OtherMsg = "The #define name '%s' does not follow the rules" % (Name), BelongsToTable = IdentifierTable, BelongsToItem = Record[0])\r
     \r
     #\r
     # Check whether only capital letters are used for typedef declarations\r
     #\r
     def NamingConventionCheckTypedefStatement(self):\r
-        pass\r
+        if EccGlobalData.gConfig.NamingConventionCheckTypedefStatement == '1' or EccGlobalData.gConfig.NamingConventionCheckAll == '1':\r
+            EdkLogger.quiet("Checking naming covention of #typedef statement ...")\r
+            for IdentifierTable in EccGlobalData.gIdentifierTableList:\r
+                SqlCommand = """select ID, Name from %s where Model = %s""" %(IdentifierTable, MODEL_IDENTIFIER_TYPEDEF)\r
+                RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)\r
+                for Record in RecordSet:\r
+                    Name = Record[1].strip()\r
+                    if Name[0] == '(':\r
+                        Name = Name[1:Name.find(')')]\r
+                    if Name.upper() != Name:\r
+                        EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_TYPEDEF_STATEMENT, OtherMsg = "The #typedef name '%s' does not follow the rules" % (Name), BelongsToTable = IdentifierTable, BelongsToItem = Record[0])\r
     \r
     #\r
     # Check whether the #ifndef at the start of an include file uses both prefix and postfix underscore characters, '_'.\r
     #\r
     def NamingConventionCheckIfndefStatement(self):\r
-        pass\r
+        if EccGlobalData.gConfig.NamingConventionCheckTypedefStatement == '1' or EccGlobalData.gConfig.NamingConventionCheckAll == '1':\r
+            EdkLogger.quiet("Checking naming covention of #ifndef statement ...")\r
+            for IdentifierTable in EccGlobalData.gIdentifierTableList:\r
+                SqlCommand = """select ID, Value from %s where Model = %s""" %(IdentifierTable, MODEL_IDENTIFIER_MACRO_IFNDEF)\r
+                RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)\r
+                for Record in RecordSet:\r
+                    Name = Record[1].replace('#ifndef', '').strip()\r
+                    if Name[0] != '_' or Name[-1] != '_':\r
+                        EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_IFNDEF_STATEMENT, OtherMsg = "The #ifndef name '%s' does not follow the rules" % (Name), BelongsToTable = IdentifierTable, BelongsToItem = Record[0])\r
     \r
     #\r
     # Rule for path name, variable name and function name\r
@@ -561,7 +589,6 @@ class Check(object):
                     if not Pattern.match(Record[1]):\r
                         EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_VARIABLE_NAME, OtherMsg = "The variable name '%s' does not follow the rules" % (Record[1]), BelongsToTable = IdentifierTable, BelongsToItem = Record[0])\r
 \r
-\r
     #\r
     # Rule for path name, variable name and function name\r
     # 1. First character should be upper case\r
@@ -589,7 +616,8 @@ class Check(object):
                 SqlCommand = """select ID, Name from %s where Model = %s""" %(IdentifierTable, MODEL_IDENTIFIER_VARIABLE)\r
                 RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)\r
                 for Record in RecordSet:\r
-                    if len(Record[1]) == 1:\r
+                    Variable = Record[1].replace('*', '')\r
+                    if len(Variable) == 1:\r
                         EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_SINGLE_CHARACTER_VARIABLE, OtherMsg = "The variable name '%s' does not follow the rules" % (Record[1]), BelongsToTable = IdentifierTable, BelongsToItem = Record[0])\r
 \r
 ##\r
@@ -600,4 +628,3 @@ class Check(object):
 if __name__ == '__main__':\r
     Check = Check()\r
     Check.Check()\r
-\r