MCPcopy Create free account
hub / github.com/cppcheck-opensource/cppcheck / misra_5_2

Method misra_5_2

addons/misra.py:1881–1928  ·  view source on GitHub ↗
(self, data)

Source from the content-addressed store, hash-verified

1879 self.reportError(tok, 5, 1)
1880
1881 def misra_5_2(self, data):
1882 scopeVars = {}
1883 num_sign_chars = self.get_num_significant_naming_chars(data)
1884 for var in data.variables:
1885 if var.nameToken is None:
1886 continue
1887 if len(var.nameToken.str) <= num_sign_chars:
1888 continue
1889 if var.nameToken.scope not in scopeVars:
1890 scopeVars.setdefault(var.nameToken.scope, {})["varlist"] = []
1891 scopeVars.setdefault(var.nameToken.scope, {})["scopelist"] = []
1892 scopeVars[var.nameToken.scope]["varlist"].append(var)
1893 for scope in data.scopes:
1894 if scope.nestedIn and scope.className:
1895 if scope.nestedIn not in scopeVars:
1896 scopeVars.setdefault(scope.nestedIn, {})["varlist"] = []
1897 scopeVars.setdefault(scope.nestedIn, {})["scopelist"] = []
1898 scopeVars[scope.nestedIn]["scopelist"].append(scope)
1899 for scope in scopeVars:
1900 if len(scopeVars[scope]["varlist"]) <= 1:
1901 continue
1902 for i, variable1 in enumerate(scopeVars[scope]["varlist"]):
1903 for variable2 in scopeVars[scope]["varlist"][i + 1:]:
1904 if variable1.isArgument and variable2.isArgument:
1905 continue
1906 if hasExternalLinkage(variable1) or hasExternalLinkage(variable2):
1907 continue
1908 if (variable1.nameToken.str[:num_sign_chars] == variable2.nameToken.str[:num_sign_chars] and
1909 variable1 is not variable2):
1910 if int(variable1.nameToken.linenr) > int(variable2.nameToken.linenr):
1911 self.reportError(variable1.nameToken, 5, 2)
1912 else:
1913 self.reportError(variable2.nameToken, 5, 2)
1914 for innerscope in scopeVars[scope]["scopelist"]:
1915 if variable1.nameToken.str[:num_sign_chars] == innerscope.className[:num_sign_chars]:
1916 if int(variable1.nameToken.linenr) > int(innerscope.bodyStart.linenr):
1917 self.reportError(variable1.nameToken, 5, 2)
1918 else:
1919 self.reportError(innerscope.bodyStart, 5, 2)
1920 if len(scopeVars[scope]["scopelist"]) <= 1:
1921 continue
1922 for i, scopename1 in enumerate(scopeVars[scope]["scopelist"]):
1923 for scopename2 in scopeVars[scope]["scopelist"][i + 1:]:
1924 if scopename1.className[:num_sign_chars] == scopename2.className[:num_sign_chars]:
1925 if int(scopename1.bodyStart.linenr) > int(scopename2.bodyStart.linenr):
1926 self.reportError(scopename1.bodyStart, 5, 2)
1927 else:
1928 self.reportError(scopename2.bodyStart, 5, 2)
1929
1930 def misra_5_4(self, data):
1931 num_sign_chars = self.get_num_significant_naming_chars(data)

Callers

nothing calls this directly

Calls 3

reportErrorMethod · 0.95
hasExternalLinkageFunction · 0.85

Tested by

no test coverage detected