ECC: integrate Doxygen func header checking into ECC main.
authorjlin16 <jlin16@7335b38e-4728-0410-8992-fb3ffe349368>
Mon, 17 Mar 2008 07:12:02 +0000 (07:12 +0000)
committerjlin16 <jlin16@7335b38e-4728-0410-8992-fb3ffe349368>
Mon, 17 Mar 2008 07:12:02 +0000 (07:12 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1071 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/Ecc/Check.py
Source/Python/Ecc/Ecc.py
Source/Python/Ecc/c.py

index d94e894..920936b 100644 (file)
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 import os\r
+import re\r
 from CommonDataClass.DataClass import *\r
 from EccToolError import *\r
 import EccGlobalData\r
+import c\r
 \r
 ## Check\r
 #\r
@@ -54,9 +56,22 @@ class Check(object):
     #\r
     def DoxygenCheckFunctionHeader(self):\r
         if EccGlobalData.gConfig.DoxygenCheckFunctionHeader == '1' or EccGlobalData.gConfig.DoxygenCheckAll == '1':\r
-            pass\r
-    \r
-    #\r
+            Tuple = os.walk(EccGlobalData.gTarget)\r
+            IgnoredPattern = re.compile(r'.*[\\/](?:BUILD|CVS|\.SVN|INTELRESTRICTEDTOOLS|INTELRESTRICTEDPKG)[\\/].*')\r
+#            ParseErrorFileList = []\r
+        \r
+            for Dirpath, Dirnames, Filenames in Tuple:\r
+                if IgnoredPattern.match(Dirpath.upper()) or Dirpath.find('.svn') != -1:\r
+                    continue\r
+                for F in Filenames:\r
+                    if os.path.splitext(F)[1] in ('.h', '.c'):\r
+                        FullName = os.path.join(Dirpath, F)\r
+                        MsgList = c.CheckFuncHeaderDoxygenComments(FullName)\r
+                        for Msg in MsgList:\r
+                            print Msg\r
+            print 'Done'                \r
+                            \r
+    #        \r
     # Check whether the first line of text in a comment block is a brief description of the element being documented. \r
     # The brief description must end with a period.\r
     #\r
index f574e17..9060a39 100644 (file)
@@ -26,7 +26,7 @@ from Common.DecClassObject import Dec
 from Common.DscClassObject import Dsc\r
 from Common.FdfClassObject import Fdf\r
 from Common.String import NormPath\r
-#import c\r
+import c\r
 \r
 ## Ecc\r
 #\r
@@ -93,7 +93,7 @@ class Ecc(object):
     #\r
     def BuildDatabase(self):\r
         EdkLogger.quiet("Building database for source code ...")\r
-        #c.CollectSourceCodeDataIntoDB(EccGlobalData.gTarget)\r
+        c.CollectSourceCodeDataIntoDB(EccGlobalData.gTarget)\r
         EdkLogger.quiet("Building database for source code done!")\r
         \r
         self.BuildMetaDataFileDatabase()\r
index caa48ca..5314867 100644 (file)
@@ -6,7 +6,7 @@ import FileProfile
 from CommonDataClass import DataClass\r
 import Database\r
 from Common import EdkLogger\r
-\r
+import EccGlobalData\r
 \r
 \r
 def GetIgnoredDirListPattern():\r
@@ -18,8 +18,7 @@ def GetFuncDeclPattern():
     return p\r
 \r
 def GetDB():\r
-    DB = Database.Database(Database.DATABASE_PATH)\r
-    return DB\r
+    return EccGlobalData.gDb\r
 \r
 def GetIdType(Str):\r
     Type = DataClass.MODEL_UNKNOWN\r
@@ -220,10 +219,13 @@ def CheckFuncHeaderDoxygenComments(FullFileName):
                    """ % FullFileName\r
     \r
     ResultSet = DbCursor.execute(SqlStatement)\r
-    FileTable = 'file'\r
+    FileTable = 'Identifier'\r
     FileID = -1\r
     for Result in ResultSet:\r
         FileTable += str(Result[0])\r
+        if FileID != -1:\r
+            ErrorMsgList.append('Duplicate file ID found in DB for file %s' % FullFileName)\r
+            return ErrorMsgList\r
         FileID = Result[0]\r
     if FileID == -1:\r
         ErrorMsgList.append('NO file ID found in DB for file %s' % FullFileName)\r
@@ -236,8 +238,11 @@ def CheckFuncHeaderDoxygenComments(FullFileName):
     \r
     ResultSet = DbCursor.execute(SqlStatement)\r
     CommentSet = []\r
-    for Result in ResultSet:\r
-        CommentSet.append(Result)\r
+    try:\r
+        for Result in ResultSet:\r
+            CommentSet.append(Result)\r
+    except:\r
+        print 'Unrecognized chars in comment'\r
     \r
     # Func Decl check\r
     SqlStatement = """ select Modifier, Name, StartLine\r
@@ -260,9 +265,11 @@ def CheckFuncHeaderDoxygenComments(FullFileName):
     \r
     ResultSet = DbCursor.execute(SqlStatement)\r
     CommentSet = []\r
-    for Result in ResultSet:\r
-        CommentSet.append(Result)\r
-    \r
+    try:\r
+        for Result in ResultSet:\r
+            CommentSet.append(Result)\r
+    except:\r
+        print 'Unrecognized chars in comment %s' % Result\r
     \r
     SqlStatement = """ select Modifier, Header, StartLine\r
                        from Function\r
@@ -302,7 +309,9 @@ def GetDoxygenStrFromComment(Str):
         while i < len(RetvalTagList):\r
             DoxygenStrList.append('@retval' + RetvalTagList[i])\r
             i += 1\r
-    DoxygenStrList[-1] = DoxygenStrList[-1].rstrip('--*/')\r
+    \r
+    if len(DoxygenStrList) > 0:\r
+        DoxygenStrList[-1] = DoxygenStrList[-1].rstrip('--*/')\r
     \r
     return DoxygenStrList\r
     \r
@@ -364,7 +373,7 @@ def CheckFunctionHeaderConsistentWithDoxygenComment(FuncModifier, FuncHeader, Fu
             if Index < DoxygenTagNumber - 1:\r
                 ErrorMsgList.append('Line %d : Excessive doxygen tags in comment' % CommentStartLine)\r
         else:\r
-            if not DoxygenStrList[Index].startswith('@retval'): \r
+            if Index < DoxygenTagNumber and not DoxygenStrList[Index].startswith('@retval'): \r
                 ErrorMsgList.append('Line %d : Number of @param doxygen tags in comment does NOT match number of function parameters' % CommentStartLine)\r
     else:\r
         if ParamNumber == 0 and DoxygenTagNumber != 0 and (FuncModifier.find('VOID') != -1 or FuncModifier.find('void') != -1):\r