Open chadrik opened 10 years ago
I don't mind if the doc type is doxygen or sphinx - what I care about is compact comments. For that reason, I really dislike the numpy style. My preference is for google-style, sans empty lines even better.
A
On Wed, Mar 5, 2014 at 10:07 AM, Chad Dombrova notifications@github.comwrote:
There are a couple of different docstring formats being used in rez right now, we should decide on a convention and stick to it.
First, we need to decide what documentation generator we will use as that will dictate the available styles. I think that sphinx is the obvious choice, because it is the only actively maintained documentation generator for python out there. I've used epydoc, and it was easy to use, but it was already pretty outdated 5 years ago, so I would not bet on that horse now. Doxygen was designed for C++ and its python support is just a hack on top of that. IIRC, it could not do python introspection on live python objects like sphinx and epydoc, it could just parse python code.
So, if sphinx is the choice we have 3 styles to choose from: native, numpy, and google. here's a sphinx extension that adds supports for the latter 2: http://sphinx-doc.org/latest/ext/napoleon.html
Here they are for your simple viewing pleasure:
sphinx
def func(arg1, arg2): """Summary line. Extended description of function. :param arg1: Description of arg1 :type arg1: int :param arg2: Description of arg2 :type arg2: str :returns: Description of return value :rtype: bool """ return True
numpy
def func(arg1, arg2): """Summary line. Extended description of function. Parameters ---------- arg1 : int Description of arg1 arg2 : str Description of arg2 Returns ------- bool Description of return value """ return True
def func(arg1, arg2): """Summary line. Extended description of function. Args: arg1 (int): Description of arg1 arg2 (str): Description of arg2 Returns: bool: Description of return value """ return True
A note on sphinx:
If you have not used sphinx before, but you have used other documentation generators like epydoc, it might be confusing at first. It is important to know that sphinx is designed in layers: the primary layer is a pure restructuredText parser, which translates an rst file into rich output like html, usually one html file per rst file. Hence, most of the sphinx documentation covers writing restructuredText documents from scratch and has nothing to say about generating API documentation from source code. That is handled by a set of extensions (namely, the autodoc extension) which generate rst documents from python modules and their docstrings, which are then converted into rich output as a second pass.
Reply to this email directly or view it on GitHubhttps://github.com/nerdvegas/rez/issues/51 .
google style is fine with me, but the empty lines are required by the restructuredText parser (except for the last one).
Ok, then shall we agree on Googly Sphynx, with no trailing empty line? If so I will start using this on new comments, and gradually switch existing doxygen styled comments over.
On Wed, Mar 5, 2014 at 3:26 PM, Chad Dombrova notifications@github.comwrote:
google style is fine with me, but the empty lines are required by the restructuredText parser (except for the last one).
Reply to this email directly or view it on GitHubhttps://github.com/nerdvegas/rez/issues/51#issuecomment-36807692 .
sounds good.
If there are no objections, I'll look at getting it hooked up to readthedocs.org so they are easily accessible etc.
On 6 March 2014 13:24, Chad Dombrova notifications@github.com wrote:
sounds good.
Reply to this email directly or view it on GitHubhttps://github.com/nerdvegas/rez/issues/51#issuecomment-36818641 .
I renamed this ticket from 'decide on...' to 'consolidate...' so that we can use it to track the progress of cleaning up our docstrings.
Here are some more complete examples of google-style docstrings: http://sphinxcontrib-napoleon.readthedocs.org/en/latest/example_google.html
If we still want to conform to this I've run a docstring checker called darglint
over master.
If we get to the point where all issues are resolved (and the tool turns out to be reliable) we could make it part of the checks for PRs.
I101: The docstring is missing a parameter in the definition.
I102: The docstring contains a parameter not in function.
I103: The docstring parameter type doesn't match function.
I201: The docstring is missing a return from definition.
I202: The docstring has a return not in definition.
I203: The docstring parameter type doesn't match function.
I301: The docstring is missing a yield present in definition.
I302: The docstring has a yield not in definition.
I401: The docstring is missing an exception raised.
I402: The docstring describes an exception not explicitly raised.
I501: The docstring describes a variable which is not defined.
S001: Describes that something went wrong in parsing the docstring.
S002: An argument/exception lacks a description.
The error code scheme is based on the errors from the pycodestyle package. The first letter corresponds to the broad class of error:
I (Interface): Incorrect or incomplete documentation.
S (Style): Errors with documentation style/syntax.
The number in the hundreds narrows the error by location in the docstring:
100: Args section
200: Returns section
300: Yields section
400: Raises section
It may not be perfect, so expect false positives but for what its worth:
./rezgui/util.py:create_pane:12: S001: s Unable to parse colon: expected TokenType.COLON but received TokenType.WORD
./rezgui/util.py:get_icon:52: S001: s Expected blank line after short description, but found TokenType.WORD: 'is'.
./rezgui/util.py:interp_color:105: I101: - b
./rezgui/util.py:interp_color:105: I101: - a
./rezgui/util.py:interp_color:105: I101: - f
./rezgui/util.py:create_toolbutton:122: I101: - parent
./rezgui/widgets/TimestampWidget.py:datetime:38: I201: - return
./rezgui/widgets/ConfiguredSplitter.py:apply_saved_layout:14: I201: - return
./rezgui/widgets/ContextTableWidget.py:__init__:290: I101: - context_model
./rezgui/widgets/ContextTableWidget.py:__init__:290: I101: - parent
./rezgui/widgets/ContextTableWidget.py:current_variant:330: I201: - return
./rezgui/widgets/ContextTableWidget.py:enter_diff_mode:354: S001: s Expected type, "of", to have "(" and ")" around it or end in colon.
./rezgui/widgets/ContextTableWidget.py:get_title:390: I201: - return
./rezgui/widgets/ContextSettingsWidget.py:__init__:36: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rezgui/widgets/ContextManagerWidget.py:get_title:197: I201: - return
./rezgui/widgets/VariantVersionsWidget.py:__init__:18: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rezgui/widgets/ContextEnvironTable.py:set_split_character:31: I101: - ch
./rezgui/widgets/PackageVersionsTable.py:__init__:12: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rezgui/widgets/PackageVersionsTable.py:select_version:46: I101: - version_range
./rezgui/widgets/PackageVersionsTable.py:select_version:46: I201: - return
./rezgui/widgets/PackageLoadingWidget.py:set_packages:26: S001: s Expected blank line after short description, but found TokenType.WORD: 'are'.
./rezgui/widgets/PackageLoadingWidget.py:set_loader_swap_delay:31: S001: s Expected blank line after short description, but found TokenType.WORD: 'useful'.
./rezgui/dialogs/WriteGraphDialog.py:view_graph:109: I101: - graph_str
./rezgui/dialogs/WriteGraphDialog.py:view_graph:109: I101: - parent
./rezgui/dialogs/WriteGraphDialog.py:view_graph:109: I101: - prune_to
./rezgui/models/ContextModel.py:copy:51: I201: - return
./rezgui/models/ContextModel.py:is_stale:65: I201: - return
./rezgui/models/ContextModel.py:is_modified:75: S001: s Expected blank line after short description, but found TokenType.WORD: 'otherwise.'.
./rezgui/models/ContextModel.py:package_depends_on:81: I101: - name_b
./rezgui/models/ContextModel.py:package_depends_on:81: I101: - name_a
./rezgui/models/ContextModel.py:package_depends_on:81: I201: - return
./rezgui/models/ContextModel.py:context:101: I201: - return
./rezgui/models/ContextModel.py:filepath:105: I201: - return
./rezgui/models/ContextModel.py:get_patch_lock:109: I101: - package_name
./rezgui/models/ContextModel.py:get_patch_lock:109: I201: - return
./rezgui/models/ContextModel.py:get_lock_requests:115: S001: s Expected blank line after short description, but found TokenType.WORD: 'the'.
./rezgui/models/ContextModel.py:resolve_context:176: I101: - callback
./rezgui/models/ContextModel.py:resolve_context:176: I101: - timestamp
./rezgui/models/ContextModel.py:resolve_context:176: I101: - package_load_callback
./rezgui/models/ContextModel.py:resolve_context:176: I101: - verbosity
./rezgui/models/ContextModel.py:resolve_context:176: I101: - buf
./rezgui/models/ContextModel.py:resolve_context:176: I101: - max_fails
./rezgui/models/ContextModel.py:can_revert:205: I201: - return
./rezgui/models/ContextModel.py:set_context:214: I101: - context
./rezgui/objects/Config.py:value:15: I101: - key
./rezgui/objects/Config.py:value:15: I101: - type_
./rezgui/objects/Config.py:value:15: I201: - return
./rezgui/objects/Config.py:get_string_list:38: I101: - key
./rezgui/objects/Config.py:get_string_list:38: I201: - return
./rezgui/objects/Config.py:prepend_string_list:49: I101: - key
./rezgui/objects/Config.py:prepend_string_list:49: I101: - max_length_key
./rezgui/objects/Config.py:prepend_string_list:49: I101: - value
./rezgui/windows/ContextSubWindow.py:diff_with_file:36: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/solver.py:__init__:179: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/solver.py:requires_list:304: S001: s Expected blank line after short description, but found TokenType.WORD: "'requires'".
./rez/solver.py:__init__:541: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/solver.py:extractable:582: I201: - return
./rez/solver.py:reduce_by:628: S001: s Expected blank line after short description, but found TokenType.WORD: 'request.'.
./rez/solver.py:extract:701: I201: - return
./rez/solver.py:split:732: I401: -r RezSystemError
./rez/solver.py:__str__:867: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/solver.py:intersect:958: I101: - range_
./rez/solver.py:reduce_by:998: I101: - package_request
./rez/solver.py:_get_dependency_order:1114: S001: s Expected blank line after short description, but found TokenType.WORD: 'but'.
./rez/solver.py:solve:1169: I201: - return
./rez/solver.py:finalise:1372: S001: s Expected blank line after short description, but found TokenType.WORD: 'packages'.
./rez/solver.py:__init__:1769: I101: - verbosity
./rez/solver.py:__init__:1769: I101: - buf
./rez/solver.py:status:1888: S001: s Unable to parse indent: expected TokenType.INDENT but received TokenType.WORD
./rez/solver.py:num_solves:1912: I201: - return
./rez/solver.py:num_fails:1919: S001: s Expected blank line after short description, but found TokenType.WORD: 'Note'.
./rez/solver.py:cyclic_fail:1926: I201: - return
./rez/solver.py:resolved_packages:1933: S001: s Expected blank line after short description, but found TokenType.WORD: 'not'.
./rez/solver.py:solve:1950: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/solver.py:solve_step:2017: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/solver.py:failure_description:2084: I101: - failure_index
./rez/solver.py:failure_description:2084: I201: - return
./rez/solver.py:_short_req_str:2277: I101: - package_request
./rez/solver.py:_short_req_str:2277: I201: - return
./rez/package_order.py:reorder:29: I202: + return
./rez/package_order.py:reorder:12: I401: -r NotImplementedError
./rez/package_order.py:to_pod:60: I201: - return
./rez/package_order.py:to_pod:89: I201: - return
./rez/package_order.py:__init__:112: S001: s Unable to parse word: expected TokenType.WORD but received TokenType.NEWLINE
./rez/package_order.py:to_pod:141: I201: - return
./rez/package_order.py:to_pod:241: I201: - return
./rez/package_order.py:to_pod:375: I201: - return
./rez/package_search.py:get_reverse_dependency_tree:27: I401: -r PackageFamilyNotFoundError
./rez/package_search.py:__init__:193: I202: + return
./rez/package_search.py:__init__:336: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/package_search.py:print_search_results:350: I101: - buf
./rez/rex.py:__init__:182: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/rex.py:get_action_methods:210: S001: s Expected blank line after short description, but found TokenType.WORD: 'methods'.
./rez/rex.py:get_public_methods:218: S001: s Expected blank line after short description, but found TokenType.WORD: 'API.'.
./rez/rex.py:get_output:472: I202: + return
./rez/rex.py:get_output:466: I401: -r NotImplementedError
./rez/rex.py:prependenv:490: S001: s Expected blank line after short description, but found TokenType.WORD: 'implement'.
./rez/rex.py:appendenv:495: S001: s Expected blank line after short description, but found TokenType.WORD: 'implement'.
./rez/rex.py:escape_string:521: I201: - return
./rez/rex.py:_saferefenv:541: S001: s Expected blank line after short description, but found TokenType.WORD: 'needed'.
./rez/rex.py:_bind_interactive_rez:551: S001: s Expected blank line after short description, but found TokenType.WORD: 'for'.
./rez/rex.py:__init__:564: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/rex.py:apply_environ:588: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/rex.py:__str__:748: I201: - return
./rez/rex.py:__add__:765: I101: - other
./rez/rex.py:split:805: I101: - delimiter
./rez/rex.py:literal:875: I101: - value
./rez/rex.py:literal:875: I201: - return
./rez/rex.py:expandable:880: I101: - value
./rez/rex.py:expandable:880: I201: - return
./rez/rex.py:__init__:963: I101: - manager
./rez/rex.py:__init__:964: I102: + override_existing_lists
./rez/rex.py:setdefault:1028: I101: - value
./rez/rex.py:__init__:1069: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/rex.py:actions:1122: I201: - return
./rez/rex.py:__getattr__:1125: I101: - attr
./rez/rex.py:__getattr__:1125: I201: - return
./rez/rex.py:bind:1130: I101: - obj
./rez/rex.py:bind:1130: I101: - name
./rez/rex.py:compile_code:1156: I401: -r RexError
./rez/rex.py:execute_function:1239: S001: s Expected blank line after short description, but found TokenType.WORD: '@returns'.
./rez/rex.py:get_output:1265: I101: - style
./rez/rex.py:get_output:1265: I201: - return
./rez/util.py:create_executable_script:57: S001: s Expected blank line after short description, but found TokenType.WORD: 'a'.
./rez/util.py:_get_python_script_files:120: S001: s Expected blank line after short description, but found TokenType.WORD: 'platform.'.
./rez/util.py:create_forwarding_script:156: I101: - *nargs
./rez/util.py:create_forwarding_script:156: I101: - filepath
./rez/util.py:create_forwarding_script:156: I101: - **kwargs
./rez/util.py:create_forwarding_script:156: I101: - func_name
./rez/util.py:create_forwarding_script:156: I101: - module
./rez/util.py:dedup:176: I101: - seq
./rez/util.py:dedup:176: I301: - yield
./rez/util.py:find_last_sublist:250: I101: - list_
./rez/util.py:find_last_sublist:250: I101: - sublist
./rez/util.py:is_non_string_iterable:271: I101: - arg
./rez/util.py:is_non_string_iterable:271: I201: - return
./rez/serialise.py:open_file_for_write:46: I401: -r WindowsError
./rez/serialise.py:set_objects:192: I301: - yield
./rez/serialise.py:load_py:212: S001: s Unable to parse colon: expected TokenType.COLON but received TokenType.WORD
./rez/serialise.py:process_python_objects:282: I101: - filepath
./rez/serialise.py:process_python_objects:282: I101: - data
./rez/serialise.py:process_python_objects:282: I401: -r ResourceError
./rez/serialise.py:load_yaml:389: S001: s Unable to parse colon: expected TokenType.COLON but received TokenType.WORD
./rez/serialise.py:load_txt:418: S001: s Unable to parse colon: expected TokenType.COLON but received TokenType.WORD
./rez/resolved_context.py:get_lock_request:92: I101: - weak
./rez/resolved_context.py:success:316: I201: - return
./rez/resolved_context.py:set_load_path:352: I101: - path
./rez/resolved_context.py:__eq__:361: I101: - other
./rez/resolved_context.py:__eq__:361: I201: - return
./rez/resolved_context.py:has_graph:387: I201: - return
./rez/resolved_context.py:get_resolved_package:392: S001: s Expected blank line after short description, but found TokenType.WORD: 'resolve.'.
./rez/resolved_context.py:copy:397: I201: - return
./rez/resolved_context.py:get_patched_request:423: S001: s Unable to parse item definition: stream was unexpectedly empty.
./rez/resolved_context.py:save:534: I101: - path
./rez/resolved_context.py:write_to_buffer:539: I101: - buf
./rez/resolved_context.py:load:565: I101: - path
./rez/resolved_context.py:load:565: I201: - return
./rez/resolved_context.py:read_from_buffer:573: I101: - identifier_str
./rez/resolved_context.py:read_from_buffer:573: I101: - buf
./rez/resolved_context.py:read_from_buffer:573: I201: - return
./rez/resolved_context.py:get_resolve_diff:579: I101: - other
./rez/resolved_context.py:get_resolve_diff:579: I401: -r ResolvedContextError
./rez/resolved_context.py:validate:920: I401: -r ResolvedContextError
./rez/resolved_context.py:get_environ:929: I101: - parent_environ
./rez/resolved_context.py:get_environ:929: I201: - return
./rez/resolved_context.py:get_shell_code:1031: S001: s Parenthetical type must contain at least one word.
./rez/resolved_context.py:get_actions:1045: S001: s Expected blank line after short description, but found TokenType.WORD: 'context.'.
./rez/resolved_context.py:execute_command:1109: I101: - **subprocess_kwargs
./rez/resolved_context.py:execute_command:1113: I102: + subprocess_kwargs
./rez/resolved_context.py:execute_rex_code:1140: I101: - **Popen_args
./rez/resolved_context.py:execute_rex_code:1147: I102: + Popen_args
./rez/resolved_context.py:execute_shell:1170: I101: - **Popen_args
./rez/resolved_context.py:execute_shell:1199: I102: + Popen_args
./rez/package_py_utils.py:expand_requires:157: I101: - *requests
./rez/package_py_utils.py:expand_requires:158: I102: + requests
./rez/package_py_utils.py:exec_command:169: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/package_py_utils.py:exec_python:186: I101: - executable
./rez/package_py_utils.py:exec_python:183: I401: -r InvalidPackageError
./rez/package_py_utils.py:find_site_python:211: I401: -r InvalidPackageError
./rez/package_copy.py:copy_package:25: I401: -r PackageCopyError
./rez/package_repository.py:get_package_repository_types:13: I201: - return
./rez/package_repository.py:package_loading:45: S001: s Expected blank line after short description, but found TokenType.WORD: 'package,'.
./rez/package_repository.py:name:70: I401: -r NotImplementedError
./rez/package_repository.py:register_resource:88: I101: - resource_class
./rez/package_repository.py:get_package_family:137: I202: + return
./rez/package_repository.py:get_package_family:131: I401: -r NotImplementedError
./rez/package_repository.py:iter_package_families:144: S001: s Expected blank line after short description, but found TokenType.WORD: 'particular'.
./rez/package_repository.py:iter_packages:153: S001: s Expected blank line after short description, but found TokenType.WORD: 'order.'.
./rez/package_repository.py:iter_variants:169: I202: + return
./rez/package_repository.py:iter_variants:163: I401: -r NotImplementedError
./rez/package_repository.py:pre_variant_install:174: I101: - variant_resource
./rez/package_repository.py:install_variant:198: I202: + return
./rez/package_repository.py:install_variant:182: I401: -r NotImplementedError
./rez/package_repository.py:get_parent_package_family:210: I202: + return
./rez/package_repository.py:get_parent_package_family:204: I401: -r NotImplementedError
./rez/package_repository.py:get_parent_package:221: I202: + return
./rez/package_repository.py:get_parent_package:215: I401: -r NotImplementedError
./rez/package_repository.py:get_variant_state_handle:226: I101: - variant_resource
./rez/package_repository.py:get_last_release_time:242: I101: - package_family_resource
./rez/package_repository.py:make_resource_handle:256: I101: - resource_key
./rez/package_repository.py:make_resource_handle:256: I101: - **variables
./rez/package_repository.py:make_resource_handle:256: I201: - return
./rez/package_repository.py:make_resource_handle:256: I401: -r ResourceError
./rez/package_repository.py:get_resource:286: I101: - **variables
./rez/package_repository.py:get_resource:288: I102: + variables
./rez/package_repository.py:get_resource_from_handle:299: I101: - verify_repo
./rez/package_repository.py:get_resource_from_handle:296: I401: -r ResourceError
./rez/package_repository.py:get_package_payload_path:333: I202: + return
./rez/package_repository.py:get_package_payload_path:326: I401: -r NotImplementedError
./rez/package_repository.py:are_same:396: I101: - path_1
./rez/package_repository.py:are_same:396: I101: - path_2
./rez/package_repository.py:get_resource:419: I101: - **variables
./rez/package_repository.py:get_resource:424: I102: + variables
./rez/package_repository.py:get_resource_from_handle:435: I401: -r ValueError
./rez/wrapper.py:__init__:25: I101: - filepath
./rez/wrapper.py:__init__:25: I401: -r RezSystemError
./rez/wrapper.py:run:68: I101: - *args
./rez/wrapper.py:print_about:204: I201: - return
./rez/wrapper.py:print_package_versions:225: S001: s Expected blank line after short description, but found TokenType.WORD: 'indicate'.
./rez/package_maker__.py:__init__:86: I101: - package_cls
./rez/package_maker__.py:__init__:86: I101: - data
./rez/package_maker__.py:get_package:97: I401: -r PackageMetadataError
./rez/package_test.py:__init__:59: I101: - **context_kwargs
./rez/package_test.py:__init__:71: I102: + context_kwargs
./rez/package_test.py:__init__:56: I401: -r NotImplementedError
./rez/package_test.py:get_package:96: I401: -r PackageNotFoundError
./rez/package_test.py:run_test:126: I101: - test_name
./rez/package_test.py:run_test:126: I401: -r PackageTestError
./rez/build_system.py:get_buildsys_types:8: I201: - return
./rez/build_system.py:create_build_system:67: I101: - verbose
./rez/build_system.py:create_build_system:67: I101: - build_args
./rez/build_system.py:create_build_system:67: I101: - child_build_args
./rez/build_system.py:create_build_system:67: I101: - package
./rez/build_system.py:create_build_system:67: I101: - working_dir
./rez/build_system.py:create_build_system:67: I101: - opts
./rez/build_system.py:create_build_system:67: I101: - buildsys_type
./rez/build_system.py:create_build_system:67: I101: - write_build_scripts
./rez/build_system.py:create_build_system:67: I201: - return
./rez/build_system.py:create_build_system:67: I401: -r BuildSystemError
./rez/build_system.py:name:103: I401: -r NotImplementedError
./rez/build_system.py:__init__:111: I101: - verbose
./rez/build_system.py:__init__:108: I401: -r BuildSystemError
./rez/build_system.py:is_valid_root:142: I101: - path
./rez/build_system.py:is_valid_root:142: I401: -r NotImplementedError
./rez/build_system.py:bind_cli:164: S001: s Expected blank line after short description, but found TokenType.WORD: 'to'.
./rez/build_system.py:build:188: I202: + return
./rez/build_system.py:build:173: I401: -r NotImplementedError
./rez/build_system.py:get_standard_vars:207: S001: s Expected blank line after short description, but found TokenType.WORD: 'for'.
./rez/build_system.py:set_standard_vars:255: S001: s Expected blank line after short description, but found TokenType.WORD: 'use'.
./rez/config.py:get:457: I101: - key
./rez/config.py:get:457: I101: - default
./rez/config.py:get:457: I201: - return
./rez/config.py:copy:461: I101: - overrides
./rez/config.py:copy:461: I101: - locked
./rez/config.py:copy:461: I201: - return
./rez/config.py:override:473: I101: - key
./rez/config.py:override:473: I101: - value
./rez/config.py:override:473: I401: -r AttributeError
./rez/config.py:remove_override:491: I101: - key
./rez/config.py:remove_override:491: I401: -r NotImplementedError
./rez/config.py:warn:500: I101: - key
./rez/config.py:warn:500: I201: - return
./rez/config.py:debug:505: I101: - key
./rez/config.py:debug:505: I201: - return
./rez/config.py:debug_printer:510: I101: - key
./rez/config.py:debug_printer:510: I201: - return
./rez/config.py:plugins:535: S001: s Expected blank line after short description, but found TokenType.WORD: 'until'.
./rez/config.py:data:540: I201: - return
./rez/config.py:nonlocal_packages_path:557: I201: - return
./rez/config.py:_swap:600: I101: - other
./rez/config.py:_create_main_config:635: S001: s Expected blank line after short description, but found TokenType.WORD: 'config'.
./rez/config.py:expand_system_vars:770: I101: - data
./rez/config.py:expand_system_vars:770: I201: - return
./rez/config.py:create_config:788: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/config.py:_create_locked_config:795: I101: - overrides
./rez/config.py:_replace_config:813: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/package_filter.py:excludes:22: I202: + return
./rez/package_filter.py:excludes:16: I401: -r NotImplementedError
./rez/package_filter.py:add_exclusion:28: I401: -r NotImplementedError
./rez/package_filter.py:add_inclusion:36: I401: -r NotImplementedError
./rez/package_filter.py:from_pod:46: I101: - data
./rez/package_filter.py:from_pod:46: I401: -r NotImplementedError
./rez/package_filter.py:to_pod:49: I401: -r NotImplementedError
./rez/package_filter.py:iter_packages:63: I202: + return
./rez/package_filter.py:iter_packages:53: I301: - yield
./rez/package_filter.py:copy:130: I201: - return
./rez/package_filter.py:__and__:140: I101: - other
./rez/package_filter.py:__and__:140: I201: - return
./rez/package_filter.py:add_inclusion:234: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/package_filter.py:copy:248: I201: - return
./rez/package_filter.py:singleton:280: I101: - cls
./rez/package_filter.py:singleton:280: I201: - return
./rez/package_filter.py:match:298: I202: + return
./rez/package_filter.py:match:292: I401: -r NotImplementedError
./rez/package_filter.py:family:305: S001: s Expected blank line after short description, but found TokenType.WORD: 'package'.
./rez/package_filter.py:cost:308: I401: -r NotImplementedError
./rez/package_filter.py:parse_rule:314: I401: -r ConfigurationError
./rez/package_filter.py:_parse:353: I101: - txt
./rez/package_filter.py:_parse:356: I202: + return
./rez/package_filter.py:_parse:353: I401: -r NotImplementedError
./rez/package_resources_.py:_uri:278: I401: -r NotImplementedError
./rez/package_resources_.py:normalize_variables:307: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/package_resources_.py:root:334: I201: - return
./rez/package_resources_.py:subpath:339: I201: - return
./rez/suite.py:context_names:56: I201: - return
./rez/suite.py:tools_path:67: S001: s Expected blank line after short description, but found TokenType.WORD: 'tools.'.
./rez/suite.py:activation_shell_code:74: I101: - shell
./rez/suite.py:activation_shell_code:74: I201: - return
./rez/suite.py:add_context:112: I101: - prefix_char
./rez/suite.py:add_context:109: I401: -r SuiteError
./rez/suite.py:bump_context:225: I101: - name
./rez/suite.py:alias_tool:261: I401: -r SuiteError
./rez/suite.py:get_tool_context:330: S001: s Expected blank line after short description, but found TokenType.WORD: 'belongs'.
./rez/suite.py:get_alias_conflicts:375: S001: s Failed to parse section head: expected it to end with TokenType.NEWLINE but encountered TokenType.WORD
./rez/suite.py:validate:385: I401: -r SuiteError
./rez/suite.py:save:424: I101: - verbose
./rez/suite.py:save:421: I401: -r SuiteError
./rez/suite.py:visible_suite_paths:504: I101: - paths
./rez/suite.py:load_visible_suites:522: I101: - paths
./rez/suite.py:print_info:531: I101: - verbose
./rez/suite.py:print_info:531: I101: - buf
./rez/suite.py:print_tools:573: I101: - verbose
./rez/suite.py:print_tools:573: I101: - buf
./rez/build_process_.py:get_build_process_types:22: I201: - return
./rez/build_process_.py:create_build_process:30: I101: - verbose
./rez/build_process_.py:create_build_process:30: I101: - vcs
./rez/build_process_.py:create_build_process:30: I101: - build_system
./rez/build_process_.py:create_build_process:30: I101: - package
./rez/build_process_.py:create_build_process:30: I101: - working_dir
./rez/build_process_.py:create_build_process:30: I101: - ensure_latest
./rez/build_process_.py:create_build_process:30: I101: - quiet
./rez/build_process_.py:create_build_process:30: I101: - ignore_existing_tag
./rez/build_process_.py:create_build_process:30: I101: - process_type
./rez/build_process_.py:create_build_process:30: I101: - skip_repo_errors
./rez/build_process_.py:create_build_process:30: I201: - return
./rez/build_process_.py:create_build_process:30: I401: -r BuildProcessError
./rez/build_process_.py:__init__:72: I401: -r BuildProcessError
./rez/build_process_.py:build:134: I202: + return
./rez/build_process_.py:build:116: I401: -r NotImplementedError
./rez/build_process_.py:build:132: I402: +r
BuildError``./rez/build_process_.py:release:152: I202: + return
./rez/build_process_.py:release:139: I401: -r NotImplementedError
./rez/build_process_.py:release:150: I402: +r
ReleaseError``./rez/build_process_.py:get_changelog:160: I202: + return
./rez/build_process_.py:get_changelog:157: I401: -r NotImplementedError
./rez/build_process_.py:visit_variants:177: I101: - **kwargs
./rez/build_process_.py:visit_variants:177: I101: - func
./rez/build_process_.py:visit_variants:177: I101: - variants
./rez/build_process_.py:visit_variants:177: I201: - return
./rez/build_process_.py:visit_variants:177: I401: -r BuildError
./rez/build_process_.py:get_package_install_path:205: I201: - return
./rez/build_process_.py:create_build_context:220: I101: - variant
./rez/build_process_.py:create_build_context:220: I101: - build_type
./rez/build_process_.py:create_build_context:220: I101: - build_path
./rez/build_process_.py:create_build_context:220: I201: - return
./rez/build_process_.py:create_build_context:220: I401: -r BuildContextResolveError
./rez/tests/test_release.py:assertVariantsEqual:94: S001: s Expected blank line after short description, but found TokenType.WORD: '"PackageRequest'.
./rez/tests/test_release.py:test_2_variant_add:169: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/tests/test_pip_utils.py:assertRequirements:240: I101: - requirement
./rez/tests/test_pip_utils.py:assertRequirements:240: I101: - expected
./rez/tests/test_pip_utils.py:assertRequirements:240: I101: - conditional_extras
./rez/tests/util.py:update_settings:63: S001: s Expected blank line after short description, but found TokenType.WORD: 'per-test'.
./rez/tests/util.py:find_file_in_path:110: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/tests/util.py:program_dependent:132: S001: s Expected blank line after short description, but found TokenType.WORD: 'visible.'.
./rez/tests/util.py:shell_dependent:163: I101: - exclude
./rez/tests/util.py:shell_dependent:163: I201: - return
./rez/tests/util.py:install_dependent:194: S001: s Expected blank line after short description, but found TokenType.WORD: 'from'.
./rez/tests/util.py:get_cli_output:207: S001: s Expected blank line after short description, but found TokenType.WORD: 'command'.
./rez/tests/test_build.py:_test_build_loco:96: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/tests/test_rex.py:_test:29: I101: - env
./rez/tests/test_rex.py:_test:29: I101: - expected_exception
./rez/tests/test_rex.py:_test:29: I101: - **ex_kwargs
./rez/tests/test_rex.py:_test:29: I101: - expected_actions
./rez/tests/test_rex.py:_test:29: I101: - expected_output
./rez/tests/test_rex.py:_test:29: I101: - func
./rez/tests/test_rex.py:test_7:269: I401: -r Exception
./rez/tests/test_packages.py:test_1_memory_variant_parent:476: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/tests/test_formatter.py:test_formatter_stdlib:30: S001: s Expected blank line after short description, but found TokenType.WORD: 'ensure'.
./rez/tests/test_shells.py:test_rex_code:218: S001: s Expected blank line after short description, but found TokenType.WORD: 'values'.
./rez/tests/test_commands.py:test_2:113: S001: s Expected blank line after short description, but found TokenType.WORD: 'concatenated'.
./rez/plugin_managers.py:extend_path:21: I101: - path
./rez/plugin_managers.py:extend_path:21: I101: - name
./rez/plugin_managers.py:extend_path:21: I201: - return
./rez/plugin_managers.py:get_plugin_class:170: I101: - plugin_name
./rez/plugin_managers.py:get_plugin_class:170: I201: - return
./rez/plugin_managers.py:get_plugin_class:170: I401: -r RezPluginError
./rez/plugin_managers.py:get_plugin_module:178: I101: - plugin_name
./rez/plugin_managers.py:get_plugin_module:178: I201: - return
./rez/plugin_managers.py:get_plugin_module:178: I401: -r RezPluginError
./rez/plugin_managers.py:config_schema:190: S001: s Expected blank line after short description, but found TokenType.WORD: 'type.'.
./rez/plugin_managers.py:create_instance:200: I101: - **instance_kwargs
./rez/plugin_managers.py:create_instance:200: I101: - plugin
./rez/plugin_managers.py:create_instance:200: I201: - return
./rez/plugin_managers.py:get_plugin_types:280: I201: - return
./rez/plugin_managers.py:get_plugins:288: S001: s Expected blank line after short description, but found TokenType.WORD: 'type.'.
./rez/plugin_managers.py:get_plugin_class:291: I101: - plugin_type
./rez/plugin_managers.py:get_plugin_class:291: I101: - plugin_name
./rez/plugin_managers.py:get_plugin_class:291: I201: - return
./rez/plugin_managers.py:get_plugin_module:298: S001: s Expected blank line after short description, but found TokenType.WORD: 'plugin'.
./rez/plugin_managers.py:get_plugin_config_data:302: I101: - plugin_type
./rez/plugin_managers.py:get_plugin_config_data:302: I201: - return
./rez/plugin_managers.py:get_failed_plugins:311: I101: - plugin_type
./rez/plugin_managers.py:create_instance:321: I101: - plugin_type
./rez/plugin_managers.py:create_instance:321: I101: - **instance_kwargs
./rez/plugin_managers.py:create_instance:321: I101: - plugin_name
./rez/plugin_managers.py:create_instance:321: I201: - return
./rez/plugin_managers.py:get_summary_string:326: I201: - return
./rez/package_help.py:__init__:29: I101: - verbose
./rez/package_help.py:__init__:29: I101: - paths
./rez/package_help.py:success:86: I201: - return
./rez/package_help.py:sections:91: I201: - return
./rez/package_help.py:open:94: I101: - section_index
./rez/package_help.py:print_info:105: I101: - buf
./rez/release_vcs.py:get_release_vcs_types:11: I201: - return
./rez/release_vcs.py:create_release_vcs:17: I101: - vcs_name
./rez/release_vcs.py:create_release_vcs:17: I101: - path
./rez/release_vcs.py:create_release_vcs:17: I201: - return
./rez/release_vcs.py:create_release_vcs:17: I401: -r ReleaseVCSError
./rez/release_vcs.py:name:85: I401: -r NotImplementedError
./rez/release_vcs.py:is_valid_root:100: S001: s Expected blank line after short description, but found TokenType.WORD: 'version'.
./rez/release_vcs.py:search_parents_for_root:111: S001: s Expected blank line after short description, but found TokenType.WORD: 'find'.
./rez/release_vcs.py:find_vcs_root:118: S001: s Expected blank line after short description, but found TokenType.WORD: 'given'.
./rez/release_vcs.py:validate_repostate:134: I401: -r NotImplementedError
./rez/release_vcs.py:get_current_revision:140: S001: s Expected blank line after short description, but found TokenType.WORD: 'appropriate'.
./rez/release_vcs.py:get_changelog:159: S001: s Expected type, "give", to have "(" and ")" around it or end in colon.
./rez/release_vcs.py:tag_exists:172: I202: + return
./rez/release_vcs.py:tag_exists:166: I401: -r NotImplementedError
./rez/release_vcs.py:create_release_tag:177: I401: -r NotImplementedError
./rez/release_vcs.py:export:191: I401: -r NotImplementedError
./rez/release_vcs.py:_cmd:203: I101: - *nargs
./rez/release_vcs.py:_cmd:203: I201: - return
./rez/release_vcs.py:_cmd:203: I401: -r ReleaseVCSError
./rez/resolver.py:__init__:40: I101: - timestamp
./rez/resolver.py:__init__:40: I101: - suppress_passive
./rez/resolver.py:__init__:40: I101: - buf
./rez/resolver.py:__init__:40: I101: - verbosity
./rez/resolver.py:__init__:40: I101: - context
./rez/resolver.py:solve:110: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/resolver.py:status:131: S001: s Unable to parse indent: expected TokenType.INDENT but received TokenType.WORD
./rez/resolver.py:_get_cached_solve:158: I201: - return
./rez/resolver.py:_set_cached_solve:310: I101: - solver_dict
./rez/resolver.py:_memcache_key:358: I101: - timestamped
./rez/resolver.py:_memcache_key:358: I201: - return
./rez/packages_.py:iter_packages:61: I202: + return
./rez/packages_.py:iter_packages:58: I301: - yield
./rez/packages_.py:config:94: I201: - return
./rez/packages_.py:is_local:103: I201: - return
./rez/packages_.py:is_relocatable:248: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/packages_.py:iter_variants:256: I202: + return
./rez/packages_.py:iter_variants:253: I301: - yield
./rez/packages_.py:get_variant:262: I101: - index
./rez/packages_.py:iter_packages:430: I101: - range_
./rez/packages_.py:iter_packages:430: I101: - name
./rez/packages_.py:iter_packages:433: I202: + return
./rez/packages_.py:iter_packages:430: I301: - yield
./rez/packages_.py:iter_package_families:479: I202: + return
./rez/packages_.py:iter_package_families:468: I301: - yield
./rez/packages_.py:iter_packages:502: I202: + return
./rez/packages_.py:iter_packages:488: I301: - yield
./rez/packages_.py:create_package:598: I101: - package_cls
./rez/packages_.py:get_last_release_time:631: I101: - paths
./rez/packages_.py:get_last_release_time:631: I101: - name
./rez/packages_.py:get_latest_package:708: I401: -r PackageFamilyNotFoundError
./rez/cli/_entry_points.py:get_specifications:14: S001: s Failed to parse noqa statement. Expected "# noqa" but received "# distlib.scripts.ScriptMaker.make_multiple"
./rez/cli/_util.py:format_help:112: I201: - return
./rez/cli/_util.py:sigint_handler:146: I101: - signum
./rez/cli/_util.py:sigint_handler:146: I101: - frame
./rez/cli/_util.py:sigterm_handler:156: I101: - signum
./rez/cli/_util.py:sigterm_handler:156: I101: - frame
./rez/cli/build.py:setup_parser_common:32: I101: - parser
./rez/backport/lru_cache.py:lru_cache:32: S001: s Unable to parse colon: expected TokenType.COLON but received TokenType.WORD
./rez/backport/importlib.py:_resolve_name:5: I101: - package
./rez/backport/importlib.py:_resolve_name:5: I101: - level
./rez/backport/importlib.py:_resolve_name:5: I101: - name
./rez/backport/importlib.py:_resolve_name:5: I201: - return
./rez/backport/importlib.py:_resolve_name:5: I401: -r ValueError
./rez/backport/importlib.py:import_module:19: I101: - package
./rez/backport/importlib.py:import_module:19: I101: - name
./rez/backport/importlib.py:import_module:19: I201: - return
./rez/backport/importlib.py:import_module:19: I401: -r TypeError
./rez/backport/shutilwhich.py:which:10: S001: s Expected blank line after short description, but found TokenType.WORD: 'conforms'.
./rez/package_bind.py:get_bind_modules:15: I101: - verbose
./rez/utils/schema.py:schema_keys:16: I101: - schema
./rez/utils/schema.py:dict_to_schema:47: I101: - schema_dict
./rez/utils/backcompat.py:convert_old_variant_handle:20: I101: - handle_dict
./rez/utils/backcompat.py:convert_old_variant_handle:20: I201: - return
./rez/utils/backcompat.py:convert_old_command_expansions:40: I101: - command
./rez/utils/backcompat.py:convert_old_command_expansions:40: I201: - return
./rez/utils/backcompat.py:convert_old_commands:54: I101: - commands
./rez/utils/backcompat.py:convert_old_commands:54: I101: - annotate
./rez/utils/backcompat.py:convert_old_commands:54: I201: - return
./rez/utils/lint_helper.py:used:14: I101: - object_
./rez/utils/resources.py:normalize_variables:82: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/resources.py:handle:89: I201: - return
./rez/utils/resources.py:get:102: I101: - key
./rez/utils/resources.py:get:102: I101: - default
./rez/utils/resources.py:get:102: I201: - return
./rez/utils/resources.py:_load:128: I202: + return
./rez/utils/resources.py:_load:118: I401: -r NotImplementedError
./rez/utils/resources.py:get:144: I101: - key
./rez/utils/resources.py:get:144: I101: - default
./rez/utils/resources.py:get:144: I201: - return
./rez/utils/resources.py:to_dict:150: S001: s Expected blank line after short description, but found TokenType.WORD: 'representation.'.
./rez/utils/resources.py:from_dict:156: I101: - d
./rez/utils/resources.py:from_dict:156: I201: - return
./rez/utils/diff_packages.py:diff_packages:14: S001: s Expected blank line after short description, but found TokenType.WORD: 'packages.'.
./rez/utils/platform_mapped.py:platform_mapped:15: S001: s Failed to parse noqa statement. Expected "# noqa" but received "# Scientific"
./rez/utils/memcached.py:set:79: I101: - key
./rez/utils/memcached.py:set:79: I101: - time
./rez/utils/memcached.py:set:79: I101: - val
./rez/utils/memcached.py:set:79: I101: - min_compress_len
./rez/utils/memcached.py:get:94: I101: - key
./rez/utils/memcached.py:delete:118: I101: - key
./rez/utils/memcached.py:memcached_client:214: I101: - servers
./rez/utils/memcached.py:memcached_client:214: I101: - debug
./rez/utils/memcached.py:memcached_client:224: I202: + return
./rez/utils/memcached.py:memcached_client:214: I301: - yield
./rez/utils/memcached.py:pool_memcached_connections:235: I101: - func
./rez/utils/memcached.py:pool_memcached_connections:235: I201: - return
./rez/utils/memcached.py:pool_memcached_connections:235: I301: - yield
./rez/utils/memcached.py:memcached:255: I201: - return
./rez/utils/scope.py:_create_child_attribute:83: I101: - attr
./rez/utils/scope.py:to_dict:91: I201: - return
./rez/utils/scope.py:update:104: I101: - data
./rez/utils/scope.py:update:104: I401: -r AttributeError
./rez/utils/scope.py:to_dict:223: I201: - return
./rez/utils/scope.py:scoped_formatter:232: I101: - **objects
./rez/utils/scope.py:scoped_formatter:232: I201: - return
./rez/utils/scope.py:scoped_format:251: I101: - **objects
./rez/utils/scope.py:scoped_format:251: I101: - txt
./rez/utils/scope.py:scoped_format:252: I102: + objects
./rez/utils/scope.py:scoped_format:255: I102: + pretty
./rez/utils/scope.py:scoped_format:256: I102: + expand
./rez/utils/scope.py:scoped_format:240: I201: - return
./rez/utils/platform_.py:arch:27: I201: - return
./rez/utils/platform_.py:os:33: I201: - return
./rez/utils/platform_.py:terminal_emulator_command:39: S001: s Expected blank line after short description, but found TokenType.WORD: 'terminal'.
./rez/utils/platform_.py:new_session_popen_args:53: S001: s Expected blank line after short description, but found TokenType.WORD: 'a'.
./rez/utils/platform_.py:image_viewer:61: I201: - return
./rez/utils/platform_.py:editor:69: I201: - return
./rez/utils/platform_.py:difftool:74: I201: - return
./rez/utils/platform_.py:tmpdir:79: I201: - return
./rez/utils/platform_.py:physical_cores:84: I201: - return
./rez/utils/platform_.py:logical_cores:95: I201: - return
./rez/utils/platform_.py:symlink:138: I101: - source
./rez/utils/platform_.py:symlink:138: I101: - link_name
./rez/utils/platform_.py:_parse_colon_table_to_dict:319: S001: s Expected blank line after short description, but found TokenType.WORD: 'of'.
./rez/utils/colorize.py:stream_is_tty:20: I101: - stream
./rez/utils/colorize.py:critical:32: S001: s Expected blank line after short description, but found TokenType.WORD: 'message.'.
./rez/utils/colorize.py:error:45: S001: s Expected blank line after short description, but found TokenType.WORD: 'message.'.
./rez/utils/colorize.py:warning:58: S001: s Expected blank line after short description, but found TokenType.WORD: 'message.'.
./rez/utils/colorize.py:info:71: S001: s Expected blank line after short description, but found TokenType.WORD: 'message.'.
./rez/utils/colorize.py:debug:84: S001: s Expected blank line after short description, but found TokenType.WORD: 'message.'.
./rez/utils/colorize.py:heading:97: S001: s Expected blank line after short description, but found TokenType.WORD: 'message.'.
./rez/utils/colorize.py:local:110: S001: s Expected blank line after short description, but found TokenType.WORD: 'local'.
./rez/utils/colorize.py:implicit:124: S001: s Expected blank line after short description, but found TokenType.WORD: 'implicit'.
./rez/utils/colorize.py:alias:138: S001: s Expected blank line after short description, but found TokenType.WORD: 'tool'.
./rez/utils/colorize.py:notset:151: S001: s Expected blank line after short description, but found TokenType.WORD: 'remove'.
./rez/utils/colorize.py:_color_level:164: S001: s Expected blank line after short description, but found TokenType.WORD: 'level.'.
./rez/utils/colorize.py:_color:182: S001: s Unable to parse indent: expected TokenType.INDENT but received TokenType.WORD
./rez/utils/colorize.py:is_tty:257: S001: s Expected blank line after short description, but found TokenType.WORD: 'stream.'.
./rez/utils/colorize.py:emit:270: I101: - record
./rez/utils/sourcecode.py:early:12: I201: - return
./rez/utils/sourcecode.py:late:25: I201: - return
./rez/utils/sourcecode.py:late:25: I401: -r ValueError
./rez/utils/sourcecode.py:include:52: I101: - module_name
./rez/utils/sourcecode.py:include:52: I101: - *module_names
./rez/utils/sourcecode.py:include:52: I201: - return
./rez/utils/formatting.py:is_valid_package_name:34: I401: -r PackageRequestError
./rez/utils/formatting.py:format:164: I101: - pretty
./rez/utils/formatting.py:format:166: I102: + "pretty
./rez/utils/formatting.py:indent:252: I101: - txt
./rez/utils/formatting.py:indent:252: I201: - return
./rez/utils/formatting.py:dict_to_attributes_code:258: I101: - dict_
./rez/utils/formatting.py:columnise:293: I101: - rows
./rez/utils/formatting.py:columnise:293: I101: - padding
./rez/utils/formatting.py:columnise:293: I201: - return
./rez/utils/formatting.py:print_colored_columns:321: I101: - rows
./rez/utils/formatting.py:print_colored_columns:321: I101: - padding
./rez/utils/formatting.py:readable_time_duration:345: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/formatting.py:readable_memory_size:359: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/formatting.py:get_epoch_time_from_str:390: S001: s Failed to parse noqa statement. Expected "# noqa" but received "# already"
./rez/utils/formatting.py:positional_number_string:420: I101: - n
./rez/utils/formatting.py:positional_number_string:420: I201: - return
./rez/utils/formatting.py:expanduser:450: I101: - path
./rez/utils/formatting.py:expanduser:450: I201: - return
./rez/utils/formatting.py:as_block_string:489: S001: s Expected blank line after short description, but found TokenType.WORD: "you're".
./rez/utils/graph_utils.py:read_graph_from_string:28: S001: s Expected blank line after short description, but found TokenType.WORD: 'compressed'.
./rez/utils/graph_utils.py:write_compacted:75: I101: - g
./rez/utils/graph_utils.py:prune_graph:161: S001: s Expected blank line after short description, but found TokenType.WORD: 'given'.
./rez/utils/graph_utils.py:save_graph:207: I401: -r RuntimeError
./rez/utils/graph_utils.py:save_graph_object:251: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/graph_utils.py:view_graph:268: I101: - graph_str
./rez/utils/graph_utils.py:view_graph:268: I101: - dest_file
./rez/utils/py23.py:get_function_arg_names:8: I101: - func
./rez/utils/py23.py:get_function_arg_names:8: I201: - return
./rez/utils/data_utils.py:remove_nones:39: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/data_utils.py:deep_update:43: I101: - dict1
./rez/utils/data_utils.py:deep_update:43: I101: - dict2
./rez/utils/data_utils.py:deep_del:81: I101: - fn
./rez/utils/data_utils.py:deep_del:81: I101: - data
./rez/utils/data_utils.py:get_dict_diff:101: I101: - d1
./rez/utils/data_utils.py:get_dict_diff:101: I101: - d2
./rez/utils/data_utils.py:get_dict_diff_str:144: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/data_utils.py:convert_dicts:328: I101: - d
./rez/utils/system.py:add_sys_paths:10: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/system.py:popen:19: I101: - **kwargs
./rez/utils/system.py:popen:19: I101: - args
./rez/utils/system.py:popen:19: I201: - return
./rez/utils/filesystem.py:make_path_writable:82: I301: - yield
./rez/utils/filesystem.py:retain_cwd:123: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/filesystem.py:safe_makedirs:162: I101: - path
./rez/utils/filesystem.py:safe_remove:175: I101: - path
./rez/utils/filesystem.py:replacing_symlink:195: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/filesystem.py:replacing_copy:201: I101: - follow_symlinks
./rez/utils/filesystem.py:replacing_copy:201: I101: - src
./rez/utils/filesystem.py:replacing_copy:201: I101: - dest
./rez/utils/filesystem.py:replace_file_or_dir:228: I101: - source
./rez/utils/filesystem.py:replace_file_or_dir:228: I101: - dest
./rez/utils/filesystem.py:additive_copytree:257: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/filesystem.py:make_tmp_name:273: I101: - name
./rez/utils/filesystem.py:make_tmp_name:273: I301: - yield
./rez/utils/filesystem.py:is_subdirectory:288: I101: - path_b
./rez/utils/filesystem.py:is_subdirectory:288: I101: - path_a
./rez/utils/filesystem.py:is_subdirectory:288: I201: - return
./rez/utils/filesystem.py:find_matching_symlink:296: I101: - source
./rez/utils/filesystem.py:find_matching_symlink:296: I101: - path
./rez/utils/filesystem.py:copy_or_replace:324: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/filesystem.py:copytree:357: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/filesystem.py:movetree:411: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/filesystem.py:safe_chmod:421: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/utils/filesystem.py:encode_filesystem_name:440: S001: s Expected blank line after short description, but found TokenType.WORD: 'non-unicode'.
./rez/utils/filesystem.py:decode_filesystem_name:513: S001: s Expected blank line after short description, but found TokenType.WORD: 'to'.
./rez/utils/filesystem.py:walk_up_dirs:582: S001: s Expected blank line after short description, but found TokenType.WORD: 'up'.
./rez/utils/yaml.py:dump_yaml:41: I101: - Dumper
./rez/utils/yaml.py:dump_yaml:41: I101: - default_flow_style
./rez/utils/yaml.py:dump_yaml:41: I101: - data
./rez/utils/yaml.py:dump_yaml:41: I201: - return
./rez/utils/yaml.py:load_yaml:49: I101: - filepath
./rez/utils/yaml.py:load_yaml:49: I201: - return
./rez/utils/py_dist.py:convert_name:22: I101: - name
./rez/utils/py_dist.py:convert_name:22: I201: - return
./rez/utils/py_dist.py:convert_version:29: I101: - version
./rez/utils/py_dist.py:convert_version:29: I201: - return
./rez/utils/py_dist.py:convert_requirement:46: S001: s Expected blank line after short description, but found TokenType.WORD: 'request'.
./rez/utils/py_dist.py:get_dist_dependencies:88: S001: s Expected blank line after short description, but found TokenType.WORD: '@param'.
./rez/utils/py_dist.py:convert_dist:125: I101: - name
./rez/utils/py_dist.py:convert_dist:122: I401: -r RezSystemError
./rez/utils/pip.py:pip_to_rez_version:78: S001: s Expected type, "version", to have "(" and ")" around it or end in colon.
./rez/utils/pip.py:pip_specifier_to_rez_requirement:147: S001: s Failed to parse noqa statement. Expected "# noqa" but received "# version-specifiers"
./rez/utils/pip.py:is_pure_python_package:317: S001: s Unable to parse colon: expected TokenType.COLON but received TokenType.WORD
./rez/utils/pip.py:get_rez_requirements:342: S001: s Failed to parse noqa statement. Expected "# noqa" but received "# metadata"
./rez/utils/pip.py:convert_distlib_to_setuptools:485: S001: s Unable to parse word: expected TokenType.WORD but received TokenType.NEWLINE
./rez/utils/pip.py:get_marker_sys_requirements:513: S001: s Failed to parse noqa statement. Expected "# noqa" but received "# id23"
./rez/utils/pip.py:normalize_requirement:576: S001: s Failed to parse noqa statement. Expected "# noqa" but received "# environment-markers"
./rez/utils/base26.py:get_next_base26:9: I101: - prev
./rez/utils/base26.py:get_next_base26:9: I401: -r ValueError
./rez/utils/base26.py:create_unique_base26_symlink:30: I101: - source
./rez/utils/base26.py:create_unique_base26_symlink:30: I101: - path
./rez/utils/base26.py:create_unique_base26_symlink:30: I401: -r RuntimeError
./rez/utils/json.py:loads:15: I101: - json_text
./rez/utils/json.py:loads:15: I201: - return
./rez/utils/amqp.py:publish_message:19: I101: - host
./rez/utils/amqp.py:publish_message:19: I101: - block
./rez/utils/amqp.py:publish_message:19: I101: - amqp_settings
./rez/utils/amqp.py:publish_message:19: I101: - data
./rez/utils/amqp.py:publish_message:19: I101: - routing_key
./rez/utils/amqp.py:_publish_message:52: I101: - host
./rez/utils/amqp.py:_publish_message:52: I101: - routing_key
./rez/utils/amqp.py:_publish_message:52: I101: - amqp_settings
./rez/utils/amqp.py:_publish_message:52: I101: - data
./rez/developer_package.py:from_path:49: I401: -r PackageMetadataError
./rez/developer_package.py:_get_preprocessed:174: S001: s Expected blank line after short description, but found TokenType.INDENT: ' '.
./rez/system.py:rez_version:17: I201: - return
./rez/system.py:platform:24: S001: s Expected blank line after short description, but found TokenType.WORD: '@returns'.
./rez/system.py:arch:35: S001: s Expected blank line after short description, but found TokenType.WORD: '@returns'.
./rez/system.py:os:46: S001: s Expected blank line after short description, but found TokenType.WORD: '@returns'.
./rez/system.py:variant:59: S001: s Expected blank line after short description, but found TokenType.WORD: 'for'.
./rez/system.py:shell:68: S001: s Expected blank line after short description, but found TokenType.WORD: '@returns'.
./rez/system.py:user:159: I201: - return
./rez/system.py:home:165: I201: - return
./rez/system.py:fqdn:170: I201: - return
./rez/system.py:hostname:178: I201: - return
./rez/system.py:domain:186: I201: - return
./rez/system.py:rez_bin_path:198: S001: s Expected blank line after short description, but found TokenType.WORD: 'available,'.
./rez/system.py:is_production_rez_install:222: I201: - return
./rez/status.py:print_info:96: I101: - buf
./rez/status.py:print_info:89: I201: - return
./rez/status.py:print_tools:125: I101: - buf
./rez/status.py:print_tools:122: I201: - return
./rez/bind/_utils.py:check_version:51: I401: -r RezBindError
./rez/bind/_utils.py:find_exe:63: I401: -r RezBindError
./rez/bind/_utils.py:extract_version:87: I401: -r RezBindError
./rez/pip.py:run_pip_command:58: S001: s Expected blank line after short description, but found TokenType.WORD: 'Args'.
./rez/pip.py:find_pip:72: I401: -r RezSystemError
./rez/pip.py:pip_install_package:173: S001: s Expected blank line after short description, but found TokenType.WORD: 'Args'.
./rez/pip.py:make_root:305: S001: s Expected blank line after short description, but found TokenType.WORD: 'distribution'.
./rez/release_hook.py:get_release_hook_types:6: I201: - return
./rez/release_hook.py:create_release_hook:12: I101: - source_path
./rez/release_hook.py:create_release_hook:12: I101: - name
./rez/release_hook.py:create_release_hook:12: I201: - return
./rez/release_hook.py:name:42: I401: -r NotImplementedError
./rez/release_hook.py:pre_build:61: I101: - **kwargs
./rez/release_hook.py:pre_build:72: I102: + kwargs
./rez/release_hook.py:pre_release:87: I101: - **kwargs
./rez/release_hook.py:pre_release:98: I102: + kwargs
./rez/release_hook.py:post_release:113: I101: - **kwargs
./rez/release_hook.py:post_release:123: I102: + kwargs
./rez/vendor/sortedcontainers/sorteddict.py:__getitem__:26: S001: s Expected blank line after short description, but found TokenType.WORD: 'negative'.
./rez/vendor/sortedcontainers/sorteddict.py:__delitem__:33: S001: s Expected blank line after short description, but found TokenType.WORD: 'indices'.
./rez/vendor/sortedcontainers/sorteddict.py:__init__:60: S001: s Expected blank line after short description, but found TokenType.WORD: 'efficiently'.
./rez/vendor/sortedcontainers/sorteddict.py:key:144: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__delitem__:154: S001: s Expected blank line after short description, but found TokenType.WORD: 'dictionary.'.
./rez/vendor/sortedcontainers/sorteddict.py:__iter__:160: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__reversed__:169: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__setitem__:178: I101: - key
./rez/vendor/sortedcontainers/sorteddict.py:__setitem__:178: I101: - value
./rez/vendor/sortedcontainers/sorteddict.py:copy:184: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:fromkeys:192: I101: - seq
./rez/vendor/sortedcontainers/sorteddict.py:fromkeys:192: I101: - value
./rez/vendor/sortedcontainers/sorteddict.py:fromkeys:192: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:items:198: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:items:206: S001: s Expected blank line after short description, but found TokenType.WORD: 'the'.
./rez/vendor/sortedcontainers/sorteddict.py:iteritems:212: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:keys:224: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:keys:230: S001: s Expected blank line after short description, but found TokenType.WORD: 'methods'.
./rez/vendor/sortedcontainers/sorteddict.py:iterkeys:236: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:values:246: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:values:252: S001: s Expected blank line after short description, but found TokenType.WORD: 'In'.
./rez/vendor/sortedcontainers/sorteddict.py:itervalues:258: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:pop:271: S001: s Expected blank line after short description, but found TokenType.WORD: 'else'.
./rez/vendor/sortedcontainers/sorteddict.py:popitem:286: S001: s Expected blank line after short description, but found TokenType.WORD: 'last=True'.
./rez/vendor/sortedcontainers/sorteddict.py:peekitem:301: I101: - index
./rez/vendor/sortedcontainers/sorteddict.py:peekitem:301: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:setdefault:316: S001: s Expected blank line after short description, but found TokenType.WORD: 'with'.
./rez/vendor/sortedcontainers/sorteddict.py:update:329: S001: s Expected blank line after short description, but found TokenType.WORD: 'existing'.
./rez/vendor/sortedcontainers/sorteddict.py:viewkeys:358: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:viewvalues:362: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:viewitems:366: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__init__:399: I101: - sorted_dict
./rez/vendor/sortedcontainers/sorteddict.py:__init__:407: I101: - sorted_dict
./rez/vendor/sortedcontainers/sorteddict.py:__len__:414: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__contains__:419: S001: s Expected blank line after short description, but found TokenType.WORD: 'keys.'.
./rez/vendor/sortedcontainers/sorteddict.py:__iter__:425: S001: s Expected blank line after short description, but found TokenType.WORD: 'over'.
./rez/vendor/sortedcontainers/sorteddict.py:__getitem__:432: I101: - index
./rez/vendor/sortedcontainers/sorteddict.py:__getitem__:432: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__reversed__:437: S001: s Expected blank line after short description, but found TokenType.WORD: 'iterated'.
./rez/vendor/sortedcontainers/sorteddict.py:index:446: S001: s Expected blank line after short description, but found TokenType.WORD: '<'.
./rez/vendor/sortedcontainers/sorteddict.py:count:453: I101: - value
./rez/vendor/sortedcontainers/sorteddict.py:count:453: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__eq__:456: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__eq__:456: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__ne__:459: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__ne__:459: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__lt__:462: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__lt__:462: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__gt__:465: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__gt__:465: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__le__:468: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__le__:468: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__ge__:471: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__ge__:471: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__and__:474: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__and__:474: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__or__:477: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__or__:477: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__sub__:480: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__sub__:480: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__xor__:483: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__xor__:483: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:isdisjoint:487: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:isdisjoint:487: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:isdisjoint:492: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:isdisjoint:492: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__init__:513: S001: s Expected blank line after short description, but found TokenType.WORD: '*sorted_dict*.'.
./rez/vendor/sortedcontainers/sorteddict.py:__init__:523: S001: s Expected blank line after short description, but found TokenType.WORD: '*sorted_dict*.'.
./rez/vendor/sortedcontainers/sorteddict.py:__len__:530: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__contains__:535: S001: s Expected blank line after short description, but found TokenType.WORD: 'values.'.
./rez/vendor/sortedcontainers/sorteddict.py:__iter__:541: S001: s Expected blank line after short description, but found TokenType.WORD: 'iterated'.
./rez/vendor/sortedcontainers/sorteddict.py:__getitem__:549: I101: - index
./rez/vendor/sortedcontainers/sorteddict.py:__getitem__:549: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__reversed__:561: S001: s Expected blank line after short description, but found TokenType.WORD: 'iterated'.
./rez/vendor/sortedcontainers/sorteddict.py:index:572: S001: s Unable to parse colon: expected TokenType.COLON but received TokenType.WORD
./rez/vendor/sortedcontainers/sorteddict.py:count:581: I101: - value
./rez/vendor/sortedcontainers/sorteddict.py:count:581: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:count:585: I101: - value
./rez/vendor/sortedcontainers/sorteddict.py:count:585: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__init__:623: S001: s Expected blank line after short description, but found TokenType.WORD: '*sorted_dict*.'.
./rez/vendor/sortedcontainers/sorteddict.py:__init__:633: S001: s Expected blank line after short description, but found TokenType.WORD: '*sorted_dict*.'.
./rez/vendor/sortedcontainers/sorteddict.py:__len__:640: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__contains__:645: S001: s Expected blank line after short description, but found TokenType.WORD: 'items.'.
./rez/vendor/sortedcontainers/sorteddict.py:__iter__:651: S001: s Expected blank line after short description, but found TokenType.WORD: 'over'.
./rez/vendor/sortedcontainers/sorteddict.py:__getitem__:659: I101: - index
./rez/vendor/sortedcontainers/sorteddict.py:__getitem__:659: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__reversed__:668: S001: s Expected blank line after short description, but found TokenType.WORD: 'iterated'.
./rez/vendor/sortedcontainers/sorteddict.py:index:678: S001: s Expected blank line after short description, but found TokenType.WORD: '<'.
./rez/vendor/sortedcontainers/sorteddict.py:count:690: I101: - item
./rez/vendor/sortedcontainers/sorteddict.py:count:690: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__eq__:695: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__eq__:695: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__ne__:698: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__ne__:698: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__lt__:701: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__lt__:701: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__gt__:704: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__gt__:704: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__le__:707: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__le__:707: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__ge__:710: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__ge__:710: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__and__:713: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__and__:713: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__or__:716: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__or__:716: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__sub__:719: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__sub__:719: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:__xor__:722: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:__xor__:722: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:isdisjoint:726: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:isdisjoint:726: I201: - return
./rez/vendor/sortedcontainers/sorteddict.py:isdisjoint:735: I101: - that
./rez/vendor/sortedcontainers/sorteddict.py:isdisjoint:735: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:__init__:22: S001: s Expected blank line after short description, but found TokenType.WORD: '
SortedSet'.
./rez/vendor/sortedcontainers/sortedset.py:key:69: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:_fromset:74: I101: - values
./rez/vendor/sortedcontainers/sortedset.py:_fromset:74: I101: - key
./rez/vendor/sortedcontainers/sortedset.py:_fromset:74: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:__contains__:80: I101: - value
./rez/vendor/sortedcontainers/sortedset.py:__contains__:80: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:__getitem__:84: I101: - index
./rez/vendor/sortedcontainers/sortedset.py:__getitem__:84: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:__delitem__:92: I101: - index
./rez/vendor/sortedcontainers/sortedset.py:_make_cmp:108: I101: - doc
./rez/vendor/sortedcontainers/sortedset.py:_make_cmp:108: I101: - set_op
./rez/vendor/sortedcontainers/sortedset.py:_make_cmp:108: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:comparer:110: I101: - that
./rez/vendor/sortedcontainers/sortedset.py:comparer:110: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:__len__:132: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:__iter__:138: S001: s Expected blank line after short description, but found TokenType.WORD: 'order.'.
./rez/vendor/sortedcontainers/sortedset.py:__reversed__:148: S001: s Expected blank line after short description, but found TokenType.WORD: 'sorted'.
./rez/vendor/sortedcontainers/sortedset.py:add:156: I101: - value
./rez/vendor/sortedcontainers/sortedset.py:copy:168: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:count:174: I101: - value
./rez/vendor/sortedcontainers/sortedset.py:count:174: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:discard:180: S001: s Expected blank line after short description, but found TokenType.WORD: 'does'.
./rez/vendor/sortedcontainers/sortedset.py:pop:190: S001: s Expected blank line after short description, but found TokenType.WORD: 'set'.
./rez/vendor/sortedcontainers/sortedset.py:remove:201: S001: s Expected blank line after short description, but found TokenType.WORD: '*value*'.
./rez/vendor/sortedcontainers/sortedset.py:difference:209: S001: s Expected blank line after short description, but found TokenType.WORD: '*iterables*.'.
./rez/vendor/sortedcontainers/sortedset.py:difference_update:220: S001: s Expected blank line after short description, but found TokenType.WORD: 'found'.
./rez/vendor/sortedcontainers/sortedset.py:intersection:238: I101: - *iterables
./rez/vendor/sortedcontainers/sortedset.py:intersection:238: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:intersection_update:248: I101: - *iterables
./rez/vendor/sortedcontainers/sortedset.py:intersection_update:248: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:symmetric_difference:261: I101: - that
./rez/vendor/sortedcontainers/sortedset.py:symmetric_difference:261: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:symmetric_difference_update:273: S001: s Expected blank line after short description, but found TokenType.WORD: 'but'.
./rez/vendor/sortedcontainers/sortedset.py:union:285: I101: - *iterables
./rez/vendor/sortedcontainers/sortedset.py:union:285: I201: - return
./rez/vendor/sortedcontainers/sortedset.py:update:294: I101: - *iterables
./rez/vendor/sortedcontainers/sortedset.py:update:294: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:recursive_repr:33: I101: - func
./rez/vendor/sortedcontainers/sortedlist.py:recursive_repr:33: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:wrapper:39: I101: - self
./rez/vendor/sortedcontainers/sortedlist.py:wrapper:39: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:__init__:62: S001: s Expected blank line after short description, but found TokenType.WORD: 'items'.
./rez/vendor/sortedcontainers/sortedlist.py:__new__:82: S001: s Expected blank line after short description, but found TokenType.WORD: 'items'.
./rez/vendor/sortedcontainers/sortedlist.py:key:102: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:_reset:105: I101: - load
./rez/vendor/sortedcontainers/sortedlist.py:add:132: I101: - val
./rez/vendor/sortedcontainers/sortedlist.py:_expand:154: I101: - pos
./rez/vendor/sortedcontainers/sortedlist.py:update:186: I101: - iterable
./rez/vendor/sortedcontainers/sortedlist.py:__contains__:212: I101: - val
./rez/vendor/sortedcontainers/sortedlist.py:__contains__:212: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:discard:229: I101: - val
./rez/vendor/sortedcontainers/sortedlist.py:remove:254: S001: s Unable to parse colon: expected TokenType.COLON but received TokenType.WORD
./rez/vendor/sortedcontainers/sortedlist.py:_delete:276: I101: - idx
./rez/vendor/sortedcontainers/sortedlist.py:_delete:276: I101: - pos
./rez/vendor/sortedcontainers/sortedlist.py:_loc:334: S001: s Expected blank line after short description, but found TokenType.WORD: 'the'.
./rez/vendor/sortedcontainers/sortedlist.py:_pos:408: S001: s Expected blank line after short description, but found TokenType.WORD: 'the'.
./rez/vendor/sortedcontainers/sortedlist.py:__delitem__:560: I101: - idx
./rez/vendor/sortedcontainers/sortedlist.py:__delitem__:560: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:__getitem__:594: I101: - idx
./rez/vendor/sortedcontainers/sortedlist.py:__getitem__:594: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:__getitem__:594: I401: -r IndexError
./rez/vendor/sortedcontainers/sortedlist.py:__setitem__:695: I101: - index
./rez/vendor/sortedcontainers/sortedlist.py:__setitem__:695: I101: - value
./rez/vendor/sortedcontainers/sortedlist.py:__setitem__:695: I401: -r ValueError
./rez/vendor/sortedcontainers/sortedlist.py:__iter__:807: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:__reversed__:816: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:islice:827: S001: s Expected blank line after short description, but found TokenType.WORD: 'inclusive'.
./rez/vendor/sortedcontainers/sortedlist.py:_islice:860: S001: s Expected blank line after short description, but found TokenType.WORD: '
'.`./rez/vendor/sortedcontainers/sortedlist.py:irange:898: I101: - reverse
./rez/vendor/sortedcontainers/sortedlist.py:irange:898: I101: - inclusive
./rez/vendor/sortedcontainers/sortedlist.py:irange:898: I101: - maximum
./rez/vendor/sortedcontainers/sortedlist.py:irange:898: I101: - minimum
./rez/vendor/sortedcontainers/sortedlist.py:irange:898: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:__len__:968: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:bisect_left:974: S001: s Expected blank line after short description, but found TokenType.WORD: 'appropriate'.
./rez/vendor/sortedcontainers/sortedlist.py:bisect_right:994: S001: s Expected blank line after short description, but found TokenType.WORD: 'point'.
./rez/vendor/sortedcontainers/sortedlist.py:count:1014: I101: - val
./rez/vendor/sortedcontainers/sortedlist.py:count:1014: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:copy:1044: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:append:1052: S001: s Expected blank line after short description, but found TokenType.WORD: 'would'.
./rez/vendor/sortedcontainers/sortedlist.py:extend:1078: S001: s Expected blank line after short description, but found TokenType.WORD: 'ValueError'.
./rez/vendor/sortedcontainers/sortedlist.py:insert:1131: S001: s Expected blank line after short description, but found TokenType.WORD: 'the'.
./rez/vendor/sortedcontainers/sortedlist.py:pop:1194: S001: s Expected blank line after short description, but found TokenType.WORD: 'list'.
./rez/vendor/sortedcontainers/sortedlist.py:index:1238: S001: s Expected blank line after short description, but found TokenType.WORD: 'ValueError'.
./rez/vendor/sortedcontainers/sortedlist.py:__add__:1294: S001: s Expected blank line after short description, but found TokenType.WORD: '*that*.'.
./rez/vendor/sortedcontainers/sortedlist.py:__iadd__:1304: S001: s Expected blank line after short description, but found TokenType.WORD: 'need'.
./rez/vendor/sortedcontainers/sortedlist.py:__mul__:1312: S001: s Expected blank line after short description, but found TokenType.WORD: 'in'.
./rez/vendor/sortedcontainers/sortedlist.py:__imul__:1320: S001: s Expected blank line after short description, but found TokenType.WORD: 'each'.
./rez/vendor/sortedcontainers/sortedlist.py:_make_cmp:1328: I101: - doc
./rez/vendor/sortedcontainers/sortedlist.py:_make_cmp:1328: I101: - seq_op
./rez/vendor/sortedcontainers/sortedlist.py:_make_cmp:1328: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:comparer:1330: I101: - that
./rez/vendor/sortedcontainers/sortedlist.py:comparer:1330: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:__repr__:1366: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:test_offset_pos:1425: I101: - pos
./rez/vendor/sortedcontainers/sortedlist.py:test_offset_pos:1425: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:identity:1461: I101: - value
./rez/vendor/sortedcontainers/sortedlist.py:identity:1461: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:__init__:1473: S001: s Expected blank line after short description, but found TokenType.WORD: 'items'.
./rez/vendor/sortedcontainers/sortedlist.py:key:1502: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:add:1515: I101: - val
./rez/vendor/sortedcontainers/sortedlist.py:_expand:1544: I101: - pos
./rez/vendor/sortedcontainers/sortedlist.py:update:1581: I101: - iterable
./rez/vendor/sortedcontainers/sortedlist.py:__contains__:1609: I101: - val
./rez/vendor/sortedcontainers/sortedlist.py:__contains__:1609: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:discard:1643: I101: - val
./rez/vendor/sortedcontainers/sortedlist.py:remove:1683: S001: s Unable to parse colon: expected TokenType.COLON but received TokenType.WORD
./rez/vendor/sortedcontainers/sortedlist.py:_delete:1717: I101: - idx
./rez/vendor/sortedcontainers/sortedlist.py:_delete:1717: I101: - pos
./rez/vendor/sortedcontainers/sortedlist.py:__setitem__:1819: I101: - index
./rez/vendor/sortedcontainers/sortedlist.py:__setitem__:1819: I101: - value
./rez/vendor/sortedcontainers/sortedlist.py:__setitem__:1819: I401: -r ValueError
./rez/vendor/sortedcontainers/sortedlist.py:irange:1944: I101: - reverse
./rez/vendor/sortedcontainers/sortedlist.py:irange:1944: I101: - inclusive
./rez/vendor/sortedcontainers/sortedlist.py:irange:1944: I101: - maximum
./rez/vendor/sortedcontainers/sortedlist.py:irange:1944: I101: - minimum
./rez/vendor/sortedcontainers/sortedlist.py:irange:1944: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:irange_key:1967: I101: - inclusive
./rez/vendor/sortedcontainers/sortedlist.py:irange_key:1967: I101: - reverse
./rez/vendor/sortedcontainers/sortedlist.py:irange_key:1967: I101: - max_key
./rez/vendor/sortedcontainers/sortedlist.py:irange_key:1967: I101: - min_key
./rez/vendor/sortedcontainers/sortedlist.py:irange_key:1967: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:bisect_left:2041: S001: s Expected blank line after short description, but found TokenType.WORD: 'appropriate'.
./rez/vendor/sortedcontainers/sortedlist.py:bisect_right:2049: S001: s Expected blank line after short description, but found TokenType.WORD: 'point'.
./rez/vendor/sortedcontainers/sortedlist.py:bisect_key_left:2058: S001: s Expected blank line after short description, but found TokenType.WORD: 'appropriate'.
./rez/vendor/sortedcontainers/sortedlist.py:bisect_key_right:2081: S001: s Expected blank line after short description, but found TokenType.WORD: 'point'.
./rez/vendor/sortedcontainers/sortedlist.py:count:2101: I101: - val
./rez/vendor/sortedcontainers/sortedlist.py:count:2101: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:copy:2134: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:append:2142: S001: s Expected blank line after short description, but found TokenType.WORD: 'would'.
./rez/vendor/sortedcontainers/sortedlist.py:extend:2172: S001: s Expected blank line after short description, but found TokenType.WORD: 'ValueError'.
./rez/vendor/sortedcontainers/sortedlist.py:insert:2227: S001: s Expected blank line after short description, but found TokenType.WORD: 'the'.
./rez/vendor/sortedcontainers/sortedlist.py:index:2295: S001: s Expected blank line after short description, but found TokenType.WORD: 'ValueError'.
./rez/vendor/sortedcontainers/sortedlist.py:__add__:2357: S001: s Expected blank line after short description, but found TokenType.WORD: '*that*.'.
./rez/vendor/sortedcontainers/sortedlist.py:__mul__:2367: S001: s Expected blank line after short description, but found TokenType.WORD: 'in'.
./rez/vendor/sortedcontainers/sortedlist.py:__imul__:2375: S001: s Expected blank line after short description, but found TokenType.WORD: 'each'.
./rez/vendor/sortedcontainers/sortedlist.py:__repr__:2385: I201: - return
./rez/vendor/sortedcontainers/sortedlist.py:test_offset_pos:2456: I101: - pos
./rez/vendor/sortedcontainers/sortedlist.py:test_offset_pos:2456: I201: - return
./rez/vendor/yaml/lib3/__init__.py:scan:58: I101: - stream
./rez/vendor/yaml/lib3/__init__.py:scan:58: I101: - Loader
./rez/vendor/yaml/lib3/__init__.py:scan:58: I301: - yield
./rez/vendor/yaml/lib3/__init__.py:parse:69: I101: - stream
./rez/vendor/yaml/lib3/__init__.py:parse:69: I101: - Loader
./rez/vendor/yaml/lib3/__init__.py:parse:69: I301: - yield
./rez/vendor/yaml/lib3/__init__.py:compose:82: S001: s Expected blank line after short description, but found TokenType.WORD: 'and'.
./rez/vendor/yaml/lib3/__init__.py:compose_all:93: S001: s Expected blank line after short description, but found TokenType.WORD: 'and'.
./rez/vendor/yaml/lib3/__init__.py:load:105: S001: s Expected blank line after short description, but found TokenType.WORD: 'and'.
./rez/vendor/yaml/lib3/__init__.py:load_all:120: S001: s Expected blank line after short description, but found TokenType.WORD: 'and'.
./rez/vendor/yaml/lib3/__init__.py:full_load:136: S001: s Expected blank line after short description, but found TokenType.WORD: 'and'.
./rez/vendor/yaml/lib3/__init__.py:full_load_all:146: S001: s Expected blank line after short description, but found TokenType.WORD: 'and'.
./rez/vendor/yaml/lib3/__init__.py:safe_load:156: S001: s Expected blank line after short description, but found TokenType.WORD: 'and'.
./rez/vendor/yaml/lib3/__init__.py:safe_load_all:166: S001: s Expected blank line after short description, but found TokenType.WORD: 'and'.
./rez/vendor/yaml/lib3/__init__.py:unsafe_load:176: S001: s Expected blank line after short description, but found TokenType.WORD: 'and'.
./rez/vendor/yaml/lib3/__init__.py:unsafe_load_all:186: S001: s Expected blank line after short description, but found TokenType.WORD: 'and'.
./rez/vendor/yaml/lib3/__init__.py:emit:198: S001: s Expected blank line after short description, but found TokenType.WORD: 'If'.
./rez/vendor/yaml/lib3/__init__.py:serialize_all:221: S001: s Expected blank line after short description, but found TokenType.WORD: 'If'.
./rez/vendor/yaml/lib3/__init__.py:serialize:247: S001: s Expected blank line after short description, but found TokenType.WORD: 'If'.
./rez/vendor/yaml/lib3/__init__.py:dump_all:259: S001: s Expected blank line after short description, but found TokenType.WORD: 'If'.
./rez/vendor/yaml/lib3/__init__.py:dump:287: S001: s Expected blank line after short description, but found TokenType.WORD: 'If'.
./rez/vendor/yaml/lib3/__init__.py:safe_dump_all:294: S001: s Expected blank line after short description, but found TokenType.WORD: 'Produce'.
./rez/vendor/yaml/lib3/__init__.py:safe_dump:302: S001: s Expected blank line after short description, but found TokenType.WORD: 'Produce'.
./rez/vendor/yaml/lib3/__init__.py:add_implicit_resolver:311: S001: s Expected blank line after short description, but found TokenType.WORD: 'If'.
./rez/vendor/yaml/lib3/__init__.py:add_path_resolver:321: S001: s Expected blank line after short description, but found TokenType.WORD: 'A'.
./rez/vendor/yaml/lib3/__init__.py:add_constructor:331: S001: s Expected blank line after short description, but found TokenType.WORD: 'Constructor'.
./rez/vendor/yaml/lib3/__init__.py:add_multi_constructor:339: S001: s Expected blank line after short description, but found TokenType.WORD: 'Multi-constructor'.
./rez/vendor/yaml/lib3/__init__.py:add_representer:348: S001: s Expected blank line after short description, but found TokenType.WORD: 'Representer'.
./rez/vendor/yaml/lib3/__init__.py:add_multi_representer:357: S001: s Expected blank line after short description, but found TokenType.WORD: 'Multi-representer'.
./rez/vendor/yaml/lib3/__init__.py:from_yaml:390: I101: - loader
./rez/vendor/yaml/lib3/__init__.py:from_yaml:390: I101: - node
./rez/vendor/yaml/lib3/__init__.py:from_yaml:390: I201: - return
./rez/vendor/yaml/lib3/__init__.py:to_yaml:397: I101: - dumper
./rez/vendor/yaml/lib3/__init__.py:to_yaml:397: I101: - data
./rez/vendor/yaml/lib3/__init__.py:to_yaml:397: I201: - return
I think we should ignore contents of ./rez/vendor
, to not make updating of vendored libs even more of a chore.
I'd go with Pylint (which comes with builtin support for docstring checks, although disabled by default) and would allow us to do general code linting. Pylint supports Sphinx, Google and Numpy dosctrs.
And I agree, vendored libs should be ignored.
Would be good to add linting to CI, as well as black (when we get to that).
On Tue, 8 Oct. 2019, 12:12 Jean-Christophe Morin, notifications@github.com wrote:
I'd go with Pylint (which comes with builtin support for docstring checks, although disabled by default) and would allow us to do general code linting. Pylint supports Sphinx, Google and Numpy dosctrs.
And I agree, vendored libs should be ignored.
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/nerdvegas/rez/issues/51?email_source=notifications&email_token=AAMOUSXWKAESPI7OUTFBZNDQNPNAHA5CNFSM4AM4MDB2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEASJWMY#issuecomment-539269939, or mute the thread https://github.com/notifications/unsubscribe-auth/AAMOUSVRHKLXDDPRNUIIATTQNPNAHANCNFSM4AM4MDBQ .
There are a couple of different docstring formats being used in rez right now, we should decide on a convention and stick to it.
First, we need to decide what documentation generator we will use as that will dictate the available styles. I think that sphinx is the obvious choice, because it is the only actively maintained documentation generator for python out there. I've used epydoc, and it was easy to use, but it was already pretty outdated 5 years ago, so I would not bet on that horse now. Doxygen was designed for C++ and its python support is just a hack on top of that. IIRC, it could not do python introspection on live python objects like sphinx and epydoc, it could just parse python code.
So, if sphinx is the choice we have 3 styles to choose from: native, numpy, and google. here's a sphinx extension that adds supports for the latter 2: http://sphinx-doc.org/latest/ext/napoleon.html
Here they are for your simple viewing pleasure:
sphinx
numpy
google
A note on sphinx:
If you have not used sphinx before, but you have used other documentation generators like epydoc, it might be confusing at first. It is important to know that sphinx is designed in layers: the primary layer is a pure restructuredText parser, which translates an rst file into rich output like html, usually one html file per rst file. Hence, most of the sphinx documentation covers writing restructuredText documents from scratch and has nothing to say about generating API documentation from source code. That is handled by a set of extensions (namely, the autodoc extension) which generate rst documents from python modules and their docstrings, which are then converted into rich output as a second pass.