Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | List of all members
xrefs._XrefPattern Class Reference
Inheritance diagram for xrefs._XrefPattern:

Public Member Functions

 __init__ (self, md, SymbolsIndex symbols_index, Dict[str, str] packages)
 
 handleMatch (self, m, data)
 

Public Attributes

 symbols_index
 
 packages
 
 md
 

Static Public Attributes

str XREF_RE = r'\[`(?P<symbol>[^]]+)`\]?\[\]|\[(?P<text>[^]]*)\]\[`(?P<target>[^]]+)`\]'
 

Protected Member Functions

Optional[str] _resolve_ref (self, str ref)
 
str _make_github_uri (self, str file, Optional[int] lineno=None)
 

Detailed Description

Converts xrefs into GitHub links.

Recognizes [`symbol`][] and [text][`symbol`] link formats where symbol
is expected to be one of the following:

* Fully qualified reference to a C++ class, method or function;
* Package URI pointing to one of the packages included in the SDK
checkout.
* File reference to one of the file in the SDK.

Definition at line 38 of file xrefs.py.

Constructor & Destructor Documentation

◆ __init__()

xrefs._XrefPattern.__init__ (   self,
  md,
SymbolsIndex  symbols_index,
Dict[str, str]  packages 
)

Definition at line 52 of file xrefs.py.

53 packages: Dict[str, str]):
54 super().__init__(_XrefPattern.XREF_RE)
55 self.symbols_index = symbols_index
56 self.packages = packages
57 self.md = md
58

Member Function Documentation

◆ _make_github_uri()

str xrefs._XrefPattern._make_github_uri (   self,
str  file,
Optional[int]   lineno = None 
)
protected
Generates source link pointing to GitHub

Definition at line 109 of file xrefs.py.

109 def _make_github_uri(self, file: str, lineno: Optional[int] = None) -> str:
110 """Generates source link pointing to GitHub"""
111 fragment = f'#L{lineno}' if lineno is not None else ''
112 return f'https://github.com/dart-lang/sdk/blob/{self.symbols_index.commit}/{file}{fragment}'
113
114

◆ _resolve_ref()

Optional[str] xrefs._XrefPattern._resolve_ref (   self,
str  ref 
)
protected

Definition at line 86 of file xrefs.py.

86 def _resolve_ref(self, ref: str) -> Optional[str]:
87 if ref.startswith('package:'):
88 # Resolve as package uri via .packages.
89 uri = urlparse(ref)
90 (package_name, *path_to_file) = uri.path.split('/', 1)
91 package_path = self.packages[package_name]
92 if len(path_to_file) == 0:
93 return self._make_github_uri(package_path)
94 else:
95 return self._make_github_uri(
96 os.path.join(package_path, path_to_file[0]))
97 elif os.path.exists(ref):
98 # Resolve as a file link.
99 return self._make_github_uri(ref)
100 else:
101 # Resolve as a symbol.
102 loc = self.symbols_index.try_resolve(ref)
103 if loc is not None:
104 return self._make_github_uri(loc.filename, loc.lineno)
105
106 logging.error('Failed to resolve xref %s', ref)
107 return None
108

◆ handleMatch()

xrefs._XrefPattern.handleMatch (   self,
  m,
  data 
)

Definition at line 59 of file xrefs.py.

59 def handleMatch(self, m, data):
60 text = m.group('text')
61 symbol = m.group('symbol')
62 if symbol is None:
63 symbol = m.group('target')
64
65 uri = self._resolve_ref(symbol) or '#broken-link'
66
67 # Remember this xref. build process can later use this information
68 # to produce xref reference section at the end of the markdown file.
69 self.md.xrefs[f"`{symbol}`"] = uri
70
71 # Create <a href='uri'>text</a> element. If text is not defined
72 # simply use a slightly sanitized symbol name.
73 anchor = etree.Element('a')
74 anchor.attrib['href'] = uri
75 anchor.attrib['target'] = '_blank'
76 if text is not None:
77 anchor.text = text
78 else:
79 code = etree.Element('code')
80 code.text = re.sub(r'^dart::', '', symbol)
81 anchor.append(code)
82
83 # Replace the whole pattern match with anchor element.
84 return anchor, m.start(0), m.end(0)
85

Member Data Documentation

◆ md

xrefs._XrefPattern.md

Definition at line 57 of file xrefs.py.

◆ packages

xrefs._XrefPattern.packages

Definition at line 56 of file xrefs.py.

◆ symbols_index

xrefs._XrefPattern.symbols_index

Definition at line 55 of file xrefs.py.

◆ XREF_RE

str xrefs._XrefPattern.XREF_RE = r'\[`(?P<symbol>[^]]+)`\]?\[\]|\[(?P<text>[^]]*)\]\[`(?P<target>[^]]+)`\]'
static

Definition at line 50 of file xrefs.py.


The documentation for this class was generated from the following file: