-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: parse xrefs differently with new xref format #90
Changes from 5 commits
4e03a57
cb92674
b54c587
17b345b
b2e6138
3808337
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -329,22 +329,24 @@ def _extract_docstring_info(summary_info, summary, name): | |
initial_index = -1 | ||
|
||
# Prevent GoogleDocstring crashing on custom types and parse all xrefs to normal | ||
if '<xref:' in parsed_text: | ||
if '<xref' in parsed_text: | ||
type_pairs = [] | ||
initial_index = max(0, parsed_text.find('<xref')) | ||
|
||
summary_part = parsed_text[initial_index:] | ||
|
||
# Remove all occurrences of "<xref:type>" | ||
while "<xref:" in summary_part: | ||
# Remove all occurrences of "<xref uid="uid">text</xref>" | ||
while "<xref" in summary_part: | ||
|
||
# Expecting format of "<xref:type>:" | ||
if "<xref:" in summary_part: | ||
# Expecting format of "<xref uid="uid">text</xref>" | ||
if "<xref" in summary_part: | ||
initial_index += summary_part.find("<xref") | ||
original_type = parsed_text[initial_index:initial_index+(parsed_text[initial_index:].find('>'))+1] | ||
original_type = parsed_text[initial_index:initial_index+(parsed_text[initial_index:].find('/xref>'))+6] | ||
initial_index += len(original_type) | ||
original_type = " ".join(filter(None, re.split(r'\n| |\|\s|\t', original_type))) | ||
safe_type = 'xref_' + original_type[6:-1] | ||
# Extract text from "<xref uid="uid">text</xref>" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's a bit late now, but we could also add this UID to the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'll keep that in mind perhaps for non-Cloud or third party xrefs. |
||
index = original_type.find(">") | ||
safe_type = 'xref_' + original_type[index+1:index+(original_type[index:].find("<"))] | ||
else: | ||
raise ValueError("Encountered unexpected type in Exception docstring.") | ||
|
||
|
@@ -451,10 +453,20 @@ def _extract_docstring_info(summary_info, summary, name): | |
cur_type = word | ||
if cur_type in [':type', ':param', ':raises', ':raises:']: | ||
index += 1 | ||
arg_name = parsed_text[index][:-1] | ||
# Initialize empty dictionary if it doesn't exist already | ||
if arg_name not in summary_info[var_types[cur_type]] and ':raises' not in cur_type: | ||
summary_info[var_types[cur_type]][arg_name] = {} | ||
# Exception that's not xref should be treated same as other names | ||
if ':raises' not in cur_type or 'xref' not in parsed_text[index]: | ||
arg_name = parsed_text[index][:-1] | ||
# xrefs are treated by taking its second half and combining the two | ||
elif ':raises' in cur_type and 'xref' in parsed_text[index]: | ||
arg_name = f'{parsed_text[index]} {parsed_text[index+1][:-1]}' | ||
index += 1 | ||
|
||
try: | ||
# Initialize empty dictionary if it doesn't exist already | ||
if arg_name not in summary_info[var_types[cur_type]] and ':raises' not in cur_type: | ||
summary_info[var_types[cur_type]][arg_name] = {} | ||
except KeyError: | ||
raise KeyError(f"Encountered wrong formatting, please check docstring for {name}") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not sure this will work. What if there is a release with bad docs? We still need to generate docs for it. So, we should make our best guess and move on. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Repos should have a While it's usually not set to be a required check, this lets contributors know that docs job would fail or pass before triggering a release. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sounds good. Might need to update this depending on how back filling old libraries goes. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I do have the Kokoro job set up that could try and run it for all versions, I'll try testing on that for older versions. |
||
|
||
# Empty target string | ||
words = [] | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is 6? Can we make that a constant or something?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.