test_banned_keywords.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #!/usr/bin/env bash
  2. # This test checks for use of deprecated/outdated methods and suggests their replacement
  3. declare -a KEYWORDS=()
  4. declare -a HINTS=()
  5. KEYWORDS[0]="\-DBL_MAX"
  6. HINTS[0]="Use the type-safe method std::numeric_limits<double>::lowest() instead"
  7. KEYWORDS[1]="DBL_MAX"
  8. HINTS[1]="Use the type-safe method std::numeric_limits<double>::max() instead"
  9. KEYWORDS[2]="DBL_MIN"
  10. HINTS[2]="Use the type-safe method std::numeric_limits<double>::min() instead (but be careful - maybe you actually want lowest!!)"
  11. KEYWORDS[3]="DBL_EPSILON"
  12. HINTS[3]="Use the type-safe method std::numeric_limits<double>::epsilon() instead"
  13. KEYWORDS[4]="INT_MIN"
  14. HINTS[4]="Use the type-safe method std::numeric_limits<int>::min() instead"
  15. KEYWORDS[5]="INT_MAX"
  16. HINTS[5]="Use the type-safe method std::numeric_limits<int>::max() instead"
  17. KEYWORDS[6]="\bqMin("
  18. HINTS[6]="Use std::min instead"
  19. KEYWORDS[7]="\bqMax("
  20. HINTS[7]="Use std::max instead"
  21. KEYWORDS[8]="\bqAbs("
  22. HINTS[8]="Use std::fabs instead"
  23. KEYWORDS[9]="\bqRound("
  24. HINTS[9]="Use std::round instead"
  25. KEYWORDS[10]="\bqSort("
  26. HINTS[10]="Use std::sort instead"
  27. KEYWORDS[11]="@param"
  28. HINTS[11]="Use \param instead (works correct with Python docstrings)"
  29. KEYWORDS[12]="@return"
  30. HINTS[12]="Use \returns instead (works correct with Python docstrings)"
  31. KEYWORDS[13]="@note"
  32. HINTS[13]="Use \note instead (works correct with Python docstrings)"
  33. KEYWORDS[14]="@since"
  34. HINTS[14]="Use \since instead (works correct with Python docstrings)"
  35. KEYWORDS[15]="@warning"
  36. HINTS[15]="Use \warning instead (works correct with Python docstrings)"
  37. KEYWORDS[11]="@deprecated"
  38. HINTS[11]="Use \deprecated instead (works correct with Python docstrings)"
  39. KEYWORDS[12]="\bqIsFinite("
  40. HINTS[12]="Use std::isfinite instead"
  41. KEYWORDS[13]="\bqIsInf("
  42. HINTS[13]="Use std::isinf instead"
  43. KEYWORDS[14]="\bqIsNaN("
  44. HINTS[14]="Use std::isnan instead"
  45. KEYWORDS[15]="\bqCopy("
  46. HINTS[15]="Use std::copy instead"
  47. KEYWORDS[16]="\bqCount("
  48. HINTS[16]="Use std::count instead"
  49. KEYWORDS[17]="\bqEqual("
  50. HINTS[17]="Use std::equal instead"
  51. KEYWORDS[18]="\bqFill("
  52. HINTS[18]="Use std::fill instead"
  53. KEYWORDS[19]="\bqFind("
  54. HINTS[19]="Use std::find instead"
  55. KEYWORDS[20]="\bqGreater("
  56. HINTS[20]="Use std::greater instead"
  57. KEYWORDS[21]="\bqLess("
  58. HINTS[21]="Use std::less instead"
  59. KEYWORDS[22]="\bqLowerBound("
  60. HINTS[22]="Use std::lower_bound instead"
  61. KEYWORDS[23]="\bqStableSort("
  62. HINTS[23]="Use std::stable_sort instead"
  63. KEYWORDS[24]="\bqSwap("
  64. HINTS[24]="Use std::swap instead"
  65. KEYWORDS[25]="\bqUpperBound("
  66. HINTS[25]="Use std::upper_bound instead"
  67. KEYWORDS[26]="QScopedPointer"
  68. HINTS[26]="Use std::unique_ptr instead"
  69. KEYWORDS[27]="QSharedPointer"
  70. HINTS[27]="Use std::shared_ptr instead"
  71. KEYWORDS[28]="QOverload"
  72. HINTS[28]="Use qgis::overload instead"
  73. KEYWORDS[29]="qFloor"
  74. HINTS[29]="Use std::floor instead"
  75. KEYWORDS[30]="qCeil"
  76. HINTS[30]="Use std::ceil instead"
  77. KEYWORDS[31]="qSqrt"
  78. HINTS[31]="Use std::sqrt instead"
  79. KEYWORDS[32]="QStringLiteral()"
  80. HINTS[32]="Use QString() instead"
  81. KEYWORDS[33]="QStringLiteral( \"\" )"
  82. HINTS[33]="Use QString() instead"
  83. KEYWORDS[34]="QLatin1String( \"\" )"
  84. HINTS[34]="Use QString() instead"
  85. RES=
  86. DIR=$(git rev-parse --show-toplevel)
  87. pushd "${DIR}" > /dev/null || exit
  88. for i in "${!KEYWORDS[@]}"
  89. do
  90. FOUND=$(git grep "${KEYWORDS[$i]}" -- 'src/*.h' 'src/*.cpp' -- ':!*qtermwidget*' | grep --invert-match skip-keyword-check)
  91. if [[ ${FOUND} ]]; then
  92. echo "Found source files with banned keyword: ${KEYWORDS[$i]}!"
  93. echo " -> ${HINTS[$i]}"
  94. echo " or mark with // skip-keyword-check"
  95. echo
  96. echo "${FOUND}"
  97. echo
  98. RES=1
  99. fi
  100. done
  101. popd > /dev/null || exit
  102. if [ $RES ]; then
  103. echo " *** Found banned keywords"
  104. exit 1
  105. fi