dougpuob updated this revision to Diff 297443.
dougpuob added a comment.

- Support to add Class prefix for Hungarian Notation.
- Support to add Enum prefix for Hungarian Notation.
- Support `unsigned long long`, `ULONG`, and `HANDLE` types and others.
- Support options for Hungarian Notation in config file.
- Added more test cases.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D86671/new/

https://reviews.llvm.org/D86671

Files:
  clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
  clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
  
clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-hungarian-notation-cfgfile.cpp

Index: clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-hungarian-notation-cfgfile.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-hungarian-notation-cfgfile.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-hungarian-notation-cfgfile.cpp
@@ -72,34 +72,34 @@
 // RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.long-int                , value: li   }, \
 // RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.long                    , value: l    }, \
 // RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.ptrdiff_t               , value: p    }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.BOOL                    , value: b    }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.BOOLEAN                 , value: b    }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.BYTE                    , value: by   }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.CHAR                    , value: c    }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.UCHAR                   , value: uc   }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.SHORT                   , value: s    }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.USHORT                  , value: us   }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.WORD                    , value: w    }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.DWORD                   , value: dw   }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.DWORD32                 , value: dw32 }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.DWORD64                 , value: dw64 }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.LONG                    , value: l    }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.ULONG                   , value: ul   }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.ULONG32                 , value: ul32 }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.ULONG64                 , value: ul64 }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.ULONGLONG               , value: ull  }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.HANDLE                  , value: h    }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.INT                     , value: i    }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.INT8                    , value: i8   }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.INT16                   , value: i16  }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.INT32                   , value: i32  }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.INT64                   , value: i64  }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.UINT                    , value: ui   }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.UINT8                   , value: u8   }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.UINT16                  , value: u16  }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.UINT32                  , value: u32  }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.UINT64                  , value: u64  }, \
-// RUN:     { key: readability-identifier-naming.HungarianNotation.PrimitiveType.PVOID                   , value: p    }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.BOOL                  , value: b    }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.BOOLEAN               , value: b    }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.BYTE                  , value: by   }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.CHAR                  , value: c    }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.UCHAR                 , value: uc   }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.SHORT                 , value: s    }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.USHORT                , value: us   }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.WORD                  , value: w    }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.DWORD                 , value: dw   }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.DWORD32               , value: dw32 }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.DWORD64               , value: dw64 }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.LONG                  , value: l    }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.ULONG                 , value: ul   }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.ULONG32               , value: ul32 }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.ULONG64               , value: ul64 }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.ULONGLONG             , value: ull  }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.HANDLE                , value: h    }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.INT                   , value: i    }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.INT8                  , value: i8   }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.INT16                 , value: i16  }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.INT32                 , value: i32  }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.INT64                 , value: i64  }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.UINT                  , value: ui   }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.UINT8                 , value: u8   }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.UINT16                , value: u16  }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.UINT32                , value: u32  }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.UINT64                , value: u64  }, \
+// RUN:     { key: readability-identifier-naming.HungarianNotation.UserDefinedType.PVOID                 , value: p    }, \
 // RUN:   ]}'
 
 // clang-format off
Index: clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
===================================================================
--- clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
+++ clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
@@ -53,6 +53,7 @@
     llvm::StringMap<std::string> Options;
     llvm::StringMap<std::string> CString;
     llvm::StringMap<std::string> PrimitiveType;
+    llvm::StringMap<std::string> UserDefinedType;
     llvm::StringMap<std::string> DerivedType;
   };
 
Index: clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -165,6 +165,14 @@
      m(long-int) \
      m(long) \
      m(ptrdiff_t) \
+
+static StringRef const HungarainNotationPrimitiveTypes[] = {
+#define STRINGIZE(v) #v,
+  HUNGARIAN_NOTATION_PRIMITIVE_TYPES(STRINGIZE)
+#undef STRINGIZE
+};
+
+#define HUNGARIAN_NOTATION_USER_DEFINED_TYPES(m) \
      m(BOOL) \
      m(BOOLEAN) \
      m(BYTE) \
@@ -194,12 +202,13 @@
      m(UINT64) \
      m(PVOID) \
 
-static StringRef const HungarainNotationPrimitiveTypes[] = {
+static StringRef const HungarainNotationUserDefinedTypes[] = {
 #define STRINGIZE(v) #v,
-  HUNGARIAN_NOTATION_PRIMITIVE_TYPES(STRINGIZE)
+  HUNGARIAN_NOTATION_USER_DEFINED_TYPES(STRINGIZE)
 #undef STRINGIZE
 };
 
+
 #undef NAMING_KEYS
 // clang-format on
 
@@ -280,36 +289,7 @@
         {"long long",               "ll"  },
         {"long int",                "li"  },
         {"long",                    "l"   },
-        {"ptrdiff_t",               "p"   },
-        // Windows data types
-        {"BOOL",                    "b"   },
-        {"BOOLEAN",                 "b"   },
-        {"BYTE",                    "by"  },
-        {"CHAR",                    "c"   },
-        {"UCHAR",                   "uc"  },
-        {"SHORT",                   "s"   },
-        {"USHORT",                  "us"  },
-        {"WORD",                    "w"   },
-        {"DWORD",                   "dw"  },
-        {"DWORD32",                 "dw32"},
-        {"DWORD64",                 "dw64"},
-        {"LONG",                    "l"   },
-        {"ULONG",                   "ul"  },
-        {"ULONG32",                 "ul32"},
-        {"ULONG64",                 "ul64"},
-        {"ULONGLONG",               "ull" },
-        {"HANDLE",                  "h"   },
-        {"INT",                     "i"   },
-        {"INT8",                    "i8"  },
-        {"INT16",                   "i16" },
-        {"INT32",                   "i32" },
-        {"INT64",                   "i64" },
-        {"UINT",                    "ui"  },
-        {"UINT8",                   "u8"  },
-        {"UINT16",                  "u16" },
-        {"UINT32",                  "u32" },
-        {"UINT64",                  "u64" },
-        {"PVOID",                   "p"   }};
+        {"ptrdiff_t",               "p"   }};
   // clang-format on
   for (auto &Type : PrimitiveTypes) {
     std::string Val = HNOption->PrimitiveType.lookup(Type.getKey());
@@ -317,6 +297,45 @@
       HNOption->PrimitiveType.insert({Type.getKey(), Type.getValue()});
     }
   }
+
+  // clang-format off
+  const static llvm::StringMap<std::string> UserDefinedTypes = {
+      // Windows data types
+      {"BOOL",                    "b"   },
+      {"BOOLEAN",                 "b"   },
+      {"BYTE",                    "by"  },
+      {"CHAR",                    "c"   },
+      {"UCHAR",                   "uc"  },
+      {"SHORT",                   "s"   },
+      {"USHORT",                  "us"  },
+      {"WORD",                    "w"   },
+      {"DWORD",                   "dw"  },
+      {"DWORD32",                 "dw32"},
+      {"DWORD64",                 "dw64"},
+      {"LONG",                    "l"   },
+      {"ULONG",                   "ul"  },
+      {"ULONG32",                 "ul32"},
+      {"ULONG64",                 "ul64"},
+      {"ULONGLONG",               "ull" },
+      {"HANDLE",                  "h"   },
+      {"INT",                     "i"   },
+      {"INT8",                    "i8"  },
+      {"INT16",                   "i16" },
+      {"INT32",                   "i32" },
+      {"INT64",                   "i64" },
+      {"UINT",                    "ui"  },
+      {"UINT8",                   "u8"  },
+      {"UINT16",                  "u16" },
+      {"UINT32",                  "u32" },
+      {"UINT64",                  "u64" },
+      {"PVOID",                   "p"   } };
+  // clang-format on
+  for (auto &Type : UserDefinedTypes) {
+    std::string Val = HNOption->UserDefinedType.lookup(Type.getKey());
+    if (Val.empty()) {
+      HNOption->UserDefinedType.insert({Type.getKey(), Type.getValue()});
+    }
+  }
 }
 
 static void getHungarianNotationFileConfig(
@@ -373,6 +392,15 @@
       HNOption->PrimitiveType.insert({Type, Val});
     }
   }
+
+  for (auto const &WDType : HungarainNotationUserDefinedTypes) {
+    std::string Key = Section + "UserDefinedType." + WDType.str();
+    std::string Val = Options.get(Key, "");
+    std::string Type = WDType.str();
+    if (!Val.empty()) {
+      HNOption->UserDefinedType.insert({Type, Val});
+    }
+  }
 }
 
 static std::vector<llvm::Optional<IdentifierNamingCheck::NamingStyle>>
@@ -516,6 +544,17 @@
     }
   }
 
+  // User-Defined types
+  if (PrefixStr.empty()) {
+    for (const auto &Type : HNOption.UserDefinedType) {
+      const auto &key = Type.getKey().str();
+      if (ModifiedTypeName == key) {
+        PrefixStr = Type.getValue();
+        break;
+      }
+    }
+  }
+
   for (size_t Idx = 0; Idx < PtrCount; Idx++) {
     PrefixStr.insert(0, HNOption.DerivedType.lookup("Pointer"));
   }
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to