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

Method misra_5_4

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

Source from the content-addressed store, hash-verified

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)
1932 macro = {}
1933 compile_name = re.compile(r'#define ([a-zA-Z0-9_]+)')
1934 compile_param = re.compile(r'#define ([a-zA-Z0-9_]+)[(]([a-zA-Z0-9_, ]+)[)]')
1935 short_names = {}
1936 macro_w_arg = []
1937 for dir in data.directives:
1938 res1 = compile_name.match(dir.str)
1939 if res1:
1940 if dir not in macro:
1941 macro.setdefault(dir, {})["name"] = []
1942 macro.setdefault(dir, {})["params"] = []
1943 full_name = res1.group(1)
1944 macro[dir]["name"] = full_name
1945 short_name = full_name[:num_sign_chars]
1946 if short_name in short_names:
1947 _dir = short_names[short_name]
1948 if full_name != macro[_dir]["name"]:
1949 self.reportError(dir, 5, 4)
1950 else:
1951 short_names[short_name] = dir
1952 res2 = compile_param.match(dir.str)
1953 if res2:
1954 res_gp2 = res2.group(2).split(",")
1955 res_gp2 = [macroname.replace(" ", "") for macroname in res_gp2]
1956 macro[dir]["params"].extend(res_gp2)
1957 macro_w_arg.append(dir)
1958 for mvar in macro_w_arg:
1959 for i, macroparam1 in enumerate(macro[mvar]["params"]):
1960 for j, macroparam2 in enumerate(macro[mvar]["params"]):
1961 if j > i and macroparam1[:num_sign_chars] == macroparam2[:num_sign_chars]:
1962 self.reportError(mvar, 5, 4)
1963 param = macroparam1
1964 if param[:num_sign_chars] in short_names:
1965 m_var1 = short_names[param[:num_sign_chars]]
1966 if m_var1.linenr > mvar.linenr:
1967 self.reportError(m_var1, 5, 4)
1968 else:
1969 self.reportError(mvar, 5, 4)
1970
1971 def misra_5_5(self, data):
1972 num_sign_chars = self.get_num_significant_naming_chars(data)

Callers

nothing calls this directly

Calls 5

reportErrorMethod · 0.95
compileMethod · 0.80
matchMethod · 0.45
replaceMethod · 0.45

Tested by

no test coverage detected