On 05/04/18 18:46, Jaben Carsey wrote: > Commit eece4292acc80 changed a variable name, which was tied directly to a > config file entry. this seperates the itnernal variable names from the > config file entries by having the internal dict accessed through a translation > of key words. > > Cc: Liming Gao <liming....@intel.com> > Cc: Yonghong Zhu <yonghong....@intel.com> > Cc: Laszlo Ersek <ler...@redhat.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Jaben Carsey <jaben.car...@intel.com> > --- > BaseTools/Source/Python/Ecc/Configuration.py | 101 +++++++++++++++++++- > 1 file changed, 98 insertions(+), 3 deletions(-) > > diff --git a/BaseTools/Source/Python/Ecc/Configuration.py > b/BaseTools/Source/Python/Ecc/Configuration.py > index b5b583be8c4a..72377070f831 100644 > --- a/BaseTools/Source/Python/Ecc/Configuration.py > +++ b/BaseTools/Source/Python/Ecc/Configuration.py > @@ -1,7 +1,7 @@ > ## @file > # This file is used to define class Configuration > # > -# Copyright (c) 2008 - 2017, Intel Corporation. All rights reserved.<BR> > +# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR> > # This program and the accompanying materials > # are licensed and made available under the terms and conditions of the BSD > License > # which accompanies this distribution. The full text of the license may be > found at > @@ -20,6 +20,101 @@ from Common.DataType import * > from Common.String import * > from Common.LongFilePathSupport import OpenLongFilePath as open > > +_ConfigFileToInternalTranslation = { > + # not same > + "ModifierList":"ModifierSet", > + > + # same > + "Version":"Version", > + "CheckAll":"CheckAll", > + "AutoCorrect":"AutoCorrect", > + "GeneralCheckAll":"GeneralCheckAll", > + "GeneralCheckNoTab":"GeneralCheckNoTab", > + "GeneralCheckTabWidth":"GeneralCheckTabWidth", > + "GeneralCheckIndentation":"GeneralCheckIndentation", > + "GeneralCheckIndentationWidth":"GeneralCheckIndentationWidth", > + "GeneralCheckLine":"GeneralCheckLine", > + "GeneralCheckLineWidth":"GeneralCheckLineWidth", > + "GeneralCheckNo_Asm":"GeneralCheckNo_Asm", > + "GeneralCheckNoProgma":"GeneralCheckNoProgma", > + "GeneralCheckCarriageReturn":"GeneralCheckCarriageReturn", > + "GeneralCheckFileExistence":"GeneralCheckFileExistence", > + "GeneralCheckNonAcsii":"GeneralCheckNonAcsii", > + "GeneralCheckUni":"GeneralCheckUni", > + "SpaceCheckAll":"SpaceCheckAll", > + "PredicateExpressionCheckAll":"PredicateExpressionCheckAll", > + > "PredicateExpressionCheckBooleanValue":"PredicateExpressionCheckBooleanValue", > + > "PredicateExpressionCheckNonBooleanOperator":"PredicateExpressionCheckNonBooleanOperator", > + > "PredicateExpressionCheckComparisonNullType":"PredicateExpressionCheckComparisonNullType", > + "HeaderCheckAll":"HeaderCheckAll", > + "HeaderCheckFile":"HeaderCheckFile", > + "HeaderCheckFunction":"HeaderCheckFunction", > + "HeaderCheckFileCommentEnd":"HeaderCheckFileCommentEnd", > + > "HeaderCheckCFileCommentStartSpacesNum":"HeaderCheckCFileCommentStartSpacesNum", > + > "HeaderCheckCFileCommentReferenceFormat":"HeaderCheckCFileCommentReferenceFormat", > + > "HeaderCheckCFileCommentLicenseFormat":"HeaderCheckCFileCommentLicenseFormat", > + "CFunctionLayoutCheckAll":"CFunctionLayoutCheckAll", > + "CFunctionLayoutCheckReturnType":"CFunctionLayoutCheckReturnType", > + > "CFunctionLayoutCheckOptionalFunctionalModifier":"CFunctionLayoutCheckOptionalFunctionalModifier", > + "CFunctionLayoutCheckFunctionName":"CFunctionLayoutCheckFunctionName", > + > "CFunctionLayoutCheckFunctionPrototype":"CFunctionLayoutCheckFunctionPrototype", > + "CFunctionLayoutCheckFunctionBody":"CFunctionLayoutCheckFunctionBody", > + > "CFunctionLayoutCheckDataDeclaration":"CFunctionLayoutCheckDataDeclaration", > + > "CFunctionLayoutCheckNoInitOfVariable":"CFunctionLayoutCheckNoInitOfVariable", > + "CFunctionLayoutCheckNoStatic":"CFunctionLayoutCheckNoStatic", > + "IncludeFileCheckAll":"IncludeFileCheckAll", > + "IncludeFileCheckSameName":"IncludeFileCheckSameName", > + "IncludeFileCheckIfndefStatement":"IncludeFileCheckIfndefStatement", > + "IncludeFileCheckData":"IncludeFileCheckData", > + "DeclarationDataTypeCheckAll":"DeclarationDataTypeCheckAll", > + > "DeclarationDataTypeCheckNoUseCType":"DeclarationDataTypeCheckNoUseCType", > + > "DeclarationDataTypeCheckInOutModifier":"DeclarationDataTypeCheckInOutModifier", > + > "DeclarationDataTypeCheckEFIAPIModifier":"DeclarationDataTypeCheckEFIAPIModifier", > + > "DeclarationDataTypeCheckEnumeratedType":"DeclarationDataTypeCheckEnumeratedType", > + > "DeclarationDataTypeCheckStructureDeclaration":"DeclarationDataTypeCheckStructureDeclaration", > + > "DeclarationDataTypeCheckSameStructure":"DeclarationDataTypeCheckSameStructure", > + "DeclarationDataTypeCheckUnionType":"DeclarationDataTypeCheckUnionType", > + "NamingConventionCheckAll":"NamingConventionCheckAll", > + > "NamingConventionCheckDefineStatement":"NamingConventionCheckDefineStatement", > + > "NamingConventionCheckTypedefStatement":"NamingConventionCheckTypedefStatement", > + > "NamingConventionCheckIfndefStatement":"NamingConventionCheckIfndefStatement", > + "NamingConventionCheckPathName":"NamingConventionCheckPathName", > + "NamingConventionCheckVariableName":"NamingConventionCheckVariableName", > + "NamingConventionCheckFunctionName":"NamingConventionCheckFunctionName", > + > "NamingConventionCheckSingleCharacterVariable":"NamingConventionCheckSingleCharacterVariable", > + "DoxygenCheckAll":"DoxygenCheckAll", > + "DoxygenCheckFileHeader":"DoxygenCheckFileHeader", > + "DoxygenCheckFunctionHeader":"DoxygenCheckFunctionHeader", > + "DoxygenCheckCommentDescription":"DoxygenCheckCommentDescription", > + "DoxygenCheckCommentFormat":"DoxygenCheckCommentFormat", > + "DoxygenCheckCommand":"DoxygenCheckCommand", > + "MetaDataFileCheckAll":"MetaDataFileCheckAll", > + "MetaDataFileCheckPathName":"MetaDataFileCheckPathName", > + "MetaDataFileCheckGenerateFileList":"MetaDataFileCheckGenerateFileList", > + > "MetaDataFileCheckPathOfGenerateFileList":"MetaDataFileCheckPathOfGenerateFileList", > + "MetaDataFileCheckLibraryInstance":"MetaDataFileCheckLibraryInstance", > + > "MetaDataFileCheckLibraryInstanceDependent":"MetaDataFileCheckLibraryInstanceDependent", > + > "MetaDataFileCheckLibraryInstanceOrder":"MetaDataFileCheckLibraryInstanceOrder", > + "MetaDataFileCheckLibraryNoUse":"MetaDataFileCheckLibraryNoUse", > + > "MetaDataFileCheckLibraryDefinedInDec":"MetaDataFileCheckLibraryDefinedInDec", > + "MetaDataFileCheckBinaryInfInFdf":"MetaDataFileCheckBinaryInfInFdf", > + "MetaDataFileCheckPcdDuplicate":"MetaDataFileCheckPcdDuplicate", > + "MetaDataFileCheckPcdFlash":"MetaDataFileCheckPcdFlash", > + "MetaDataFileCheckPcdNoUse":"MetaDataFileCheckPcdNoUse", > + "MetaDataFileCheckGuidDuplicate":"MetaDataFileCheckGuidDuplicate", > + "MetaDataFileCheckModuleFileNoUse":"MetaDataFileCheckModuleFileNoUse", > + "MetaDataFileCheckPcdType":"MetaDataFileCheckPcdType", > + > "MetaDataFileCheckModuleFileGuidDuplication":"MetaDataFileCheckModuleFileGuidDuplication", > + "UniCheckAll":"UniCheckAll", > + "UniCheckHelpInfo":"UniCheckHelpInfo", > + "UniCheckPCDInfo":"UniCheckPCDInfo", > + "GeneralCheckUni":"GeneralCheckUni", > + "SmmCommParaCheckAll":"SmmCommParaCheckAll", > + "SmmCommParaCheckBufferType":"SmmCommParaCheckBufferType", > + "BinaryExtList":"BinaryExtList", > + "ScanOnlyDirList":"ScanOnlyDirList" > + } > + > ## Configuration > # > # This class is used to define all items in configuration file > @@ -297,7 +392,7 @@ class Configuration(object): > Line = CleanString(Line) > if Line != '': > List = GetSplitValueList(Line, TAB_EQUAL_SPLIT) > - if List[0] not in self.__dict__: > + if _ConfigFileToInternalTranslation[List[0]] not in > self.__dict__: > ErrorMsg = "Invalid configuration option '%s' was found" > % List[0] > EdkLogger.error("Ecc", EdkLogger.ECC_ERROR, ErrorMsg, > File = Filepath, Line = LineNo) > if List[0] == 'ModifierList': > @@ -312,7 +407,7 @@ class Configuration(object): > List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT) > if List[0] == 'Copyright': > List[1] = GetSplitValueList(List[1], TAB_COMMA_SPLIT) > - self.__dict__[List[0]] = List[1] > + self.__dict__[_ConfigFileToInternalTranslation[List[0]]] = > List[1] > > def ShowMe(self): > print self.Filename >
Ouch, I didn't think the dictionary was this large. :/ Anyway, I still think this is the right approach. Three comments: * The commit message is too wide. It should be 74 chars or so. * Can we keep the list sorted (in the source code)? Because, at the moment, the "GeneralCheckUni":"GeneralCheckUni" entry is duplicated. That's easier to notice if the entries are sorted. Maybe add a comment too about keeping the lists sorted. * If the config file contains an error (typo or completely bogus option name), now we will not get a nice error message. Because, before we get to evaluate "translated_name in self.__dict__", the translation lookup will itself fail. I think that throws a KeyError exception. I think we should: - report "invalid config option" if the explicit translation fails, - use an additional assertion that the translated option name is in self.__dict__ (it should be an assertion because if it fails, it indicates a bug in Ecc). To save you some time, I'll paste the uniquely sorted list of "same" entries at the end (87 key:value pairs). Thanks! Laszlo "AutoCorrect":"AutoCorrect", "BinaryExtList":"BinaryExtList", "CFunctionLayoutCheckAll":"CFunctionLayoutCheckAll", "CFunctionLayoutCheckDataDeclaration":"CFunctionLayoutCheckDataDeclaration", "CFunctionLayoutCheckFunctionBody":"CFunctionLayoutCheckFunctionBody", "CFunctionLayoutCheckFunctionName":"CFunctionLayoutCheckFunctionName", "CFunctionLayoutCheckFunctionPrototype":"CFunctionLayoutCheckFunctionPrototype", "CFunctionLayoutCheckNoInitOfVariable":"CFunctionLayoutCheckNoInitOfVariable", "CFunctionLayoutCheckNoStatic":"CFunctionLayoutCheckNoStatic", "CFunctionLayoutCheckOptionalFunctionalModifier":"CFunctionLayoutCheckOptionalFunctionalModifier", "CFunctionLayoutCheckReturnType":"CFunctionLayoutCheckReturnType", "CheckAll":"CheckAll", "DeclarationDataTypeCheckAll":"DeclarationDataTypeCheckAll", "DeclarationDataTypeCheckEFIAPIModifier":"DeclarationDataTypeCheckEFIAPIModifier", "DeclarationDataTypeCheckEnumeratedType":"DeclarationDataTypeCheckEnumeratedType", "DeclarationDataTypeCheckInOutModifier":"DeclarationDataTypeCheckInOutModifier", "DeclarationDataTypeCheckNoUseCType":"DeclarationDataTypeCheckNoUseCType", "DeclarationDataTypeCheckSameStructure":"DeclarationDataTypeCheckSameStructure", "DeclarationDataTypeCheckStructureDeclaration":"DeclarationDataTypeCheckStructureDeclaration", "DeclarationDataTypeCheckUnionType":"DeclarationDataTypeCheckUnionType", "DoxygenCheckAll":"DoxygenCheckAll", "DoxygenCheckCommand":"DoxygenCheckCommand", "DoxygenCheckCommentDescription":"DoxygenCheckCommentDescription", "DoxygenCheckCommentFormat":"DoxygenCheckCommentFormat", "DoxygenCheckFileHeader":"DoxygenCheckFileHeader", "DoxygenCheckFunctionHeader":"DoxygenCheckFunctionHeader", "GeneralCheckAll":"GeneralCheckAll", "GeneralCheckCarriageReturn":"GeneralCheckCarriageReturn", "GeneralCheckFileExistence":"GeneralCheckFileExistence", "GeneralCheckIndentation":"GeneralCheckIndentation", "GeneralCheckIndentationWidth":"GeneralCheckIndentationWidth", "GeneralCheckLine":"GeneralCheckLine", "GeneralCheckLineWidth":"GeneralCheckLineWidth", "GeneralCheckNoProgma":"GeneralCheckNoProgma", "GeneralCheckNoTab":"GeneralCheckNoTab", "GeneralCheckNo_Asm":"GeneralCheckNo_Asm", "GeneralCheckNonAcsii":"GeneralCheckNonAcsii", "GeneralCheckTabWidth":"GeneralCheckTabWidth", "GeneralCheckUni":"GeneralCheckUni", "HeaderCheckAll":"HeaderCheckAll", "HeaderCheckCFileCommentLicenseFormat":"HeaderCheckCFileCommentLicenseFormat", "HeaderCheckCFileCommentReferenceFormat":"HeaderCheckCFileCommentReferenceFormat", "HeaderCheckCFileCommentStartSpacesNum":"HeaderCheckCFileCommentStartSpacesNum", "HeaderCheckFile":"HeaderCheckFile", "HeaderCheckFileCommentEnd":"HeaderCheckFileCommentEnd", "HeaderCheckFunction":"HeaderCheckFunction", "IncludeFileCheckAll":"IncludeFileCheckAll", "IncludeFileCheckData":"IncludeFileCheckData", "IncludeFileCheckIfndefStatement":"IncludeFileCheckIfndefStatement", "IncludeFileCheckSameName":"IncludeFileCheckSameName", "MetaDataFileCheckAll":"MetaDataFileCheckAll", "MetaDataFileCheckBinaryInfInFdf":"MetaDataFileCheckBinaryInfInFdf", "MetaDataFileCheckGenerateFileList":"MetaDataFileCheckGenerateFileList", "MetaDataFileCheckGuidDuplicate":"MetaDataFileCheckGuidDuplicate", "MetaDataFileCheckLibraryDefinedInDec":"MetaDataFileCheckLibraryDefinedInDec", "MetaDataFileCheckLibraryInstance":"MetaDataFileCheckLibraryInstance", "MetaDataFileCheckLibraryInstanceDependent":"MetaDataFileCheckLibraryInstanceDependent", "MetaDataFileCheckLibraryInstanceOrder":"MetaDataFileCheckLibraryInstanceOrder", "MetaDataFileCheckLibraryNoUse":"MetaDataFileCheckLibraryNoUse", "MetaDataFileCheckModuleFileGuidDuplication":"MetaDataFileCheckModuleFileGuidDuplication", "MetaDataFileCheckModuleFileNoUse":"MetaDataFileCheckModuleFileNoUse", "MetaDataFileCheckPathName":"MetaDataFileCheckPathName", "MetaDataFileCheckPathOfGenerateFileList":"MetaDataFileCheckPathOfGenerateFileList", "MetaDataFileCheckPcdDuplicate":"MetaDataFileCheckPcdDuplicate", "MetaDataFileCheckPcdFlash":"MetaDataFileCheckPcdFlash", "MetaDataFileCheckPcdNoUse":"MetaDataFileCheckPcdNoUse", "MetaDataFileCheckPcdType":"MetaDataFileCheckPcdType", "NamingConventionCheckAll":"NamingConventionCheckAll", "NamingConventionCheckDefineStatement":"NamingConventionCheckDefineStatement", "NamingConventionCheckFunctionName":"NamingConventionCheckFunctionName", "NamingConventionCheckIfndefStatement":"NamingConventionCheckIfndefStatement", "NamingConventionCheckPathName":"NamingConventionCheckPathName", "NamingConventionCheckSingleCharacterVariable":"NamingConventionCheckSingleCharacterVariable", "NamingConventionCheckTypedefStatement":"NamingConventionCheckTypedefStatement", "NamingConventionCheckVariableName":"NamingConventionCheckVariableName", "PredicateExpressionCheckAll":"PredicateExpressionCheckAll", "PredicateExpressionCheckBooleanValue":"PredicateExpressionCheckBooleanValue", "PredicateExpressionCheckComparisonNullType":"PredicateExpressionCheckComparisonNullType", "PredicateExpressionCheckNonBooleanOperator":"PredicateExpressionCheckNonBooleanOperator", "ScanOnlyDirList":"ScanOnlyDirList", "SmmCommParaCheckAll":"SmmCommParaCheckAll", "SmmCommParaCheckBufferType":"SmmCommParaCheckBufferType", "SpaceCheckAll":"SpaceCheckAll", "UniCheckAll":"UniCheckAll", "UniCheckHelpInfo":"UniCheckHelpInfo", "UniCheckPCDInfo":"UniCheckPCDInfo", "Version":"Version" _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel