Lines Matching refs:self

29     def __init__(self, directory, logger=None,  argument
33 self.directory = directory
34 self.enable_lineno = enable_lineno
35 self.show_warnings = show_warnings
36 self.debug = debug
39 self.log = logging.getLogger("get_abi")
41 self.log = logger
43 self.data = {}
44 self.what_symbols = {}
45 self.file_refs = {}
46 self.what_refs = {}
49 self.ignore_suffixes = (".rej", ".org", ".orig", ".bak", "~")
52 self.re_abi_dir = re.compile(r"(.*)" + ABI_DIR)
53 self.re_tag = re.compile(r"(\S+)(:\s*)(.*)", re.I)
54 self.re_valid = re.compile(self.TAGS)
55 self.re_start_spc = re.compile(r"(\s*)(\S.*)")
56 self.re_whitespace = re.compile(r"^\s+")
59 self.re_what = re.compile(r"(\/?(?:[\w\-]+\/?){1,2})")
60 self.re_escape = re.compile(r"([\.\x01-\x08\x0e-\x1f\x21-\x2f\x3a-\x40\x7b-\xff])")
61 self.re_unprintable = re.compile(r"([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xff]+)")
62 self.re_title_mark = re.compile(r"\n[\-\*\=\^\~]+\n")
63 self.re_doc = re.compile(r"Documentation/(?!devicetree)(\S+)\.rst")
64 self.re_abi = re.compile(r"(Documentation/ABI/)([\w\/\-]+)")
65 self.re_xref_node = re.compile(self.XREF)
67 def warn(self, fdata, msg, extra=None): argument
70 if not self.show_warnings:
77 self.log.warning(msg)
79 def add_symbol(self, what, fname, ln=None, xref=None): argument
82 if what not in self.what_symbols:
83 self.what_symbols[what] = {"file": {}}
85 if fname not in self.what_symbols[what]["file"]:
86 self.what_symbols[what]["file"][fname] = []
88 if ln and ln not in self.what_symbols[what]["file"][fname]:
89 self.what_symbols[what]["file"][fname].append(ln)
92 self.what_symbols[what]["xref"] = xref
94 def _parse_line(self, fdata, line): argument
101 match = self.re_tag.match(line)
107 match = self.re_valid.search(new)
116 self.warn(fdata, f"tag '{fdata.tag}' is invalid", line)
121 self.warn(fdata, "tag 'Where' is invalid. Should be 'What:' instead")
127 if content not in self.what_symbols:
128 self.add_symbol(what=content, fname=fdata.fname, ln=fdata.ln)
134 if "description" not in self.data.get(fdata.key, {}):
135 self.warn(fdata, f"{fdata.key} doesn't have a description")
138 self.add_symbol(what=w, fname=fdata.fname,
145 fdata.key = self.re_unprintable.sub("_", key).strip("_")
152 while fdata.key in self.data:
159 if fdata.key and fdata.key not in self.data:
160 self.data[fdata.key] = {
167 fdata.what = self.data[fdata.key]["what"]
169 self.what_refs[content] = fdata.key
186 if "description" in self.data[fdata.key]:
187 self.data[fdata.key]["description"] += "\n\n"
189 if fdata.file_ref not in self.data[fdata.key]["file"]:
190 self.data[fdata.key]["file"].append(fdata.file_ref)
192 if self.debug == AbiDebug.WHAT_PARSING:
193 self.log.debug("what: %s", fdata.what)
196 self.warn(fdata, "'What:' should come first:", line)
208 match = self.re_start_spc.match(c)
214 self.data[fdata.key][fdata.tag] = content
226 if self.re_whitespace.sub("", content) == "":
227 self.data[fdata.key][fdata.tag] += "\n"
231 match = self.re_start_spc.match(content)
247 self.data[fdata.key][fdata.tag].append(w)
249 self.data[fdata.key][fdata.tag] += content
257 self.data[fdata.key][fdata.tag].append(w)
259 self.data[fdata.key][fdata.tag] += "\n" + content.rstrip("\n")
264 self.warn(fdata, "Unexpected content", line)
266 def parse_readme(self, nametag, fname): argument
273 match = self.re_tag.match(line)
277 match = self.re_valid.search(new)
284 def parse_file(self, fname, path, basename): argument
288 ref = self.re_unprintable.sub("_", ref).strip("_")
304 self.file_refs[f] = ref
325 self.data[ref] = fdata.nametag
327 if self.debug & AbiDebug.WHAT_OPEN:
328 self.log.debug("Opening file %s", fname)
331 self.parse_readme(fdata.nametag, fname)
338 self._parse_line(fdata, line)
344 if "description" not in self.data.get(fdata.key, {}):
345 self.warn(fdata, f"{fdata.key} doesn't have a description")
348 self.add_symbol(what=w, fname=fname, xref=fdata.key)
350 def _parse_abi(self, root=None): argument
354 root = self.directory
361 self._parse_abi(name)
372 if basename.endswith(self.ignore_suffixes):
375 path = self.re_abi_dir.sub("", os.path.dirname(name))
377 self.parse_file(name, path, basename)
379 def parse_abi(self, root=None): argument
382 self._parse_abi(root)
384 if self.debug & AbiDebug.DUMP_ABI_STRUCTS:
385 self.log.debug(pformat(self.data))
387 def desc_txt(self, desc): argument
394 def xref(self, fname): argument
399 xref = self.file_refs.get(fname)
405 def desc_rst(self, desc): argument
412 desc = self.re_title_mark.sub("\n\n", "\n" + desc)
427 d = self.re_doc.sub(r":doc:`/\1`", d)
430 matches = self.re_abi.findall(d)
434 xref = self.file_refs.get(abi)
440 self.log.info("Didn't find ABI reference for '%s'", abi)
442 new = self.re_escape.sub(r"\\\1", m[1])
448 matches = self.re_xref_node.findall(d)
451 xref = self.what_refs.get(m)
453 new = self.re_escape.sub(r"\\\1", m)
460 def doc(self, output_in_txt=False, show_symbols=True, show_file=True, argument
465 for key, v in sorted(self.data.items(),
489 match = self.re_what.match(cur_part)
502 names[i] = "**" + self.re_escape.sub(r"\\\1", names[i]) + "**"
528 msg += self.desc_txt(desc)
530 msg += self.desc_rst(desc)
538 content = self.re_escape.sub(r"\\\1", w)
551 def check_issues(self): argument
554 for what, v in self.what_symbols.items():
558 self.log.warning("%s doesn't have a file associated", what)
575 self.log.warning("%s is defined %d times: %s", what, len(f), "; ".join(f))
577 def search_symbols(self, expr): argument
583 for t in sorted(self.data.items(), key=lambda x: [0]):