flake8
-
reviewboard/settings.py (Diff revision 1) Show all issues
Review Request #11821 — Created Sept. 24, 2021 and submitted
Previously, we guess what syntax highlighting to apply to files in the diff
viewer given their data and file extension. Sometimes this guess would be wrong,
and we have no way of setting what type of syntax highlighting gets applied to
files. This change adds a setting for mapping file extensions to pygments
lexers (the syntax highlighters), namely
reviewboard.admin.siteconfig.diffviewer_custom_pygments_lexers
. If a mapping
is not defined for a certain file extension, we revert to the old behaviour
of guessing which lexer to use given the filename and file contents.Adds
reviewboard.admin.form_widgets.LexersMappingWidget
which partly
handles the UI for modifying this mapping.
reviewboard.diffviewer.tests.test_raw_diff_chunk_generator
.reviewboard.diffviewer
with successreviewboard.admin.tests.test_lexers_mapping_widget
.reviewboard.admin.tests
with success.Summary | ID | Author |
---|---|---|
aac35dd214d59c3a66996bae103eaee99691960d | Michelle |
Description | From | Last Updated |
---|---|---|
Since we're using both the key and the value, the items() iterator might be nicer than keys(): for ext, lexer_name … |
|
|
In the case where there's a configured lexer that matches an extension, but that doesn't exist in Pygments, we probably … |
|
|
Python actually has a really nice syntax feature where for has an else clause that gets executed in the case … |
|
|
W291 trailing whitespace |
![]() |
|
E122 continuation line missing indentation or outdented |
![]() |
|
W293 blank line contains whitespace |
![]() |
|
E303 too many blank lines (2) |
![]() |
|
E122 continuation line missing indentation or outdented |
![]() |
|
W293 blank line contains whitespace |
![]() |
|
W291 trailing whitespace |
![]() |
|
W291 trailing whitespace |
![]() |
|
E122 continuation line missing indentation or outdented |
![]() |
|
This doesn't seem valuable. Let's just use the one that we imported. |
|
|
Please add a blank line between these. |
|
|
Add a blank line here too. |
|
|
The logging messages do their own format operation on the arguments, so we don't have to use % here. Let's … |
|
|
Ahh, I see now why you were defining the class local version. Django has a helper for this that you … |
|
|
W293 blank line contains whitespace |
![]() |
|
E123 closing bracket does not match indentation of opening bracket's line |
![]() |
|
E501 line too long (84 > 79 characters) |
![]() |
|
W293 blank line contains whitespace |
![]() |
|
W292 no newline at end of file |
![]() |
|
E501 line too long (84 > 79 characters) |
![]() |
|
W293 blank line contains whitespace |
![]() |
|
W292 no newline at end of file |
![]() |
|
E501 line too long (84 > 79 characters) |
![]() |
|
W293 blank line contains whitespace |
![]() |
|
E501 line too long (84 > 79 characters) |
![]() |
|
W293 blank line contains whitespace |
![]() |
|
E501 line too long (84 > 79 characters) |
![]() |
|
W293 blank line contains whitespace |
![]() |
|
E501 line too long (84 > 79 characters) |
![]() |
|
W293 blank line contains whitespace |
![]() |
|
Let's try to shorten this to be a single line. Additional detail can be added in the next paragraph if … |
|
|
Leading underscore isn't needed here. |
|
|
Dedent 4 spaces. |
|
|
Dedent 4 spaces. |
|
|
We should probably clarify in the help text that this is for pygments so people can find the appropriate documentation. |
|
|
Let's use parens and string concatenation instead of the triple-quoted string here: correct_html = ( '<input type...' '<select name...' ) |
|
|
Can wrap this a little bit nicer: correct_html += format_html( '...') That said, string concatenation in Python isn't particularly efficient. … |
|
|
Same comments here as in above method. |
|
|
Keep imports in alphabetical order. |
|
|
Let's swap these so they're alphabetical |
|
|
Add a blank line here. |
|
|
Please alphabetize. |
|
|
Add a blank line before these. Let's also put c before j |
|
|
Alphabetize. |
|
|
Add a blank line in here. |
|
|
Add a blank line between these two. |
|
|
This comment just says exactly what the code says, so it's not adding much information. Let's get rid of it. |
|
|
This should go in its own import section above the reviewboard imports. |
|
|
We have a context manager that might dramatically simplify this test class. It will do a temporary override of the … |
|
|
F811 redefinition of unused 'render_to_string' from line 6 |
![]() |
|
Add a blank line between these two. |
|
|
This needs to just be a single line. If we need more detail, we can add another paragraph. |
|
|
should I add a "Version added: 5.0.0" in here? |
![]() |
|
Since the entire class is added in 5.0, I don't think we need version specifiers for each method inside it. … |
|
Looks like a great start!
reviewboard/diffviewer/chunk_generator.py (Diff revision 1) |
---|
Since we're using both the key and the value, the
items()
iterator might be nicer thankeys()
:for ext, lexer_name in CUSTOM_PYGMENTS_LEXERS.items(): ...
reviewboard/diffviewer/chunk_generator.py (Diff revision 1) |
---|
In the case where there's a configured lexer that matches an extension, but that doesn't exist in Pygments, we probably should log an error so the user knows what went wrong.
reviewboard/diffviewer/chunk_generator.py (Diff revision 1) |
---|
Python actually has a really nice syntax feature where
for
has anelse
clause that gets executed in the case where nothing calledbreak
. So this could be combined:lexer = None for ext = CUSTOM_PYGMENTS_LEXERS.keys(): # Try to instantiate lexer ... else: # Use guess_lexer_for_filename
Summary: |
|
|||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Testing Done: |
|
|||||||||||||||||||||||||||||||||||||
Commits: |
|
|||||||||||||||||||||||||||||||||||||
Diff: |
Revision 2 (+225 -43) |
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 2) |
---|
E122 continuation line missing indentation or outdented
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 2) |
---|
W293 blank line contains whitespace
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 2) |
---|
E303 too many blank lines (2)
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 2) |
---|
E122 continuation line missing indentation or outdented
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 2) |
---|
W293 blank line contains whitespace
Commits: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 3 (+227 -49) |
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 3) |
---|
E122 continuation line missing indentation or outdented
Commits: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 4 (+228 -50) |
reviewboard/diffviewer/chunk_generator.py (Diff revision 4) |
---|
This doesn't seem valuable. Let's just use the one that we imported.
reviewboard/diffviewer/chunk_generator.py (Diff revision 4) |
---|
The logging messages do their own format operation on the arguments, so we don't have to use
%
here. Let's also make this message a little bit more explicit/terse:logger.error('Pygments lexer "%s" for "%s" files in ' 'settings.CUSTOM_PYGMENTS_LEXERS was not found.', lexer_name, ext)
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 4) |
---|
Ahh, I see now why you were defining the class local version. Django has a helper for this that you can use as a decorator:
django.test.utils.override_settings
:@override_settings(CUSTOM_PYGMENTS_LEXERS={'.md': 'LessCss'}) def test_apply_pygments_with_custom_mapping(self): ...
Commits: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 5 (+236 -84) |
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 5) |
---|
E123 closing bracket does not match indentation of opening bracket's line
Commits: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 6 (+238 -86) |
Summary: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Commits: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Diff: |
Revision 7 (+334 -106) |
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 7) |
---|
W293 blank line contains whitespace
Create LexersMappingWidget and using it in diff settings to test for now
Testing Done: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Commits: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Diff: |
Revision 8 (+1274 -1279) |
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 8) |
---|
W293 blank line contains whitespace
took out changes from bad rebasing
Commits: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 9 (+504 -114) |
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 9) |
---|
W293 blank line contains whitespace
Add tests for LexersMappingWidget
Description: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Testing Done: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Commits: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Diff: |
Revision 10 (+809 -115) |
reviewboard/diffviewer/chunk_generator.py (Diff revision 10) |
---|
E501 line too long (84 > 79 characters)
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 10) |
---|
W293 blank line contains whitespace
Commits: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 11 (+815 -123) |
reviewboard/diffviewer/chunk_generator.py (Diff revision 11) |
---|
E501 line too long (84 > 79 characters)
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 11) |
---|
W293 blank line contains whitespace
Everything is done and tested, except for handling local site stuff
Commits: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 12 (+824 -136) |
reviewboard/diffviewer/chunk_generator.py (Diff revision 12) |
---|
E501 line too long (84 > 79 characters)
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 12) |
---|
W293 blank line contains whitespace
Finalized and ready for review.
Summary: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Description: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Testing Done: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Commits: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Diff: |
Revision 13 (+807 -161) |
reviewboard/admin/form_widgets.py (Diff revision 13) |
---|
Let's try to shorten this to be a single line. Additional detail can be added in the next paragraph if necessary.
reviewboard/admin/forms/diff_settings.py (Diff revision 13) |
---|
We should probably clarify in the help text that this is for pygments so people can find the appropriate documentation.
reviewboard/admin/tests/test_lexers_mapping_widget.py (Diff revision 13) |
---|
Let's use parens and string concatenation instead of the triple-quoted string here:
correct_html = ( '<input type...' '<select name...' )
reviewboard/admin/tests/test_lexers_mapping_widget.py (Diff revision 13) |
---|
Can wrap this a little bit nicer:
correct_html += format_html( '...')
That said, string concatenation in Python isn't particularly efficient. The usual convention is to build a list and join all at once:
correct_html_parts = [ '<input ...', '<select...', ] for lex in get_all_lexers(): ... correct_html_parts.append(format_html( '...')) correct_html_parts.append('</select>') correct_html = ''.join(correct_html_parts)
reviewboard/admin/tests/test_lexers_mapping_widget.py (Diff revision 13) |
---|
Same comments here as in above method.
reviewboard/diffviewer/chunk_generator.py (Diff revision 13) |
---|
Let's swap these so they're alphabetical
Commits: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 14 (+838 -196) |
reviewboard/admin/forms/diff_settings.py (Diff revision 14) |
---|
Add a blank line before these. Let's also put
c
beforej
reviewboard/admin/tests/test_lexers_mapping_widget.py (Diff revision 14) |
---|
Add a blank line between these two.
reviewboard/diffviewer/chunk_generator.py (Diff revision 14) |
---|
This comment just says exactly what the code says, so it's not adding much information. Let's get rid of it.
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 14) |
---|
This should go in its own import section above the
reviewboard
imports.
reviewboard/diffviewer/tests/test_raw_diff_chunk_generator.py (Diff revision 14) |
---|
We have a context manager that might dramatically simplify this test class. It will do a temporary override of the siteconfig and then restore the old settings when that scope is exited. Can you try this and see if it does the right thing?
```python
settings = {
'diffviewer_custom_pygments_lexers': {'.md', 'LessCss'},
}with self.siteconfig_settings(settings):
chunk_generator = ....
Commits: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 15 (+889 -265) |
Commits: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Branch: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Depends On: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Diff: |
Revision 16 (+658 -16) |
reviewboard/admin/form_widgets.py (Diff revision 16) |
---|
F811 redefinition of unused 'render_to_string' from line 6
Commits: |
|
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 17 (+656 -16) |
Commits: |
|
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 18 (+658 -16) |
Description: |
|
|||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Testing Done: |
|
|||||||||||||||||||||||||||||||||||||||||||||
Commits: |
|
|||||||||||||||||||||||||||||||||||||||||||||
Diff: |
Revision 19 (+654 -16) |
reviewboard/admin/form_widgets.py (Diff revision 19) |
---|
This needs to just be a single line. If we need more detail, we can add another paragraph.
Commits: |
|
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 20 (+656 -16) |
Commits: |
|
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 21 (+680 -16) |
reviewboard/admin/form_widgets.py (Diff revision 21) |
---|
Since the entire class is added in 5.0, I don't think we need version specifiers for each method inside it. Here and below.
Commits: |
|
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 22 (+662 -16) |