diff --git a/CHANGES b/CHANGES index 4175723b3..1eed733d1 100644 --- a/CHANGES +++ b/CHANGES @@ -18,6 +18,7 @@ Bugs fixed * #4669: sphinx.build_main and sphinx.make_main throw NameError * #4685: autosummary emits meaningless warnings +* autodoc: crashed when invalid options given * pydomain: always strip parenthesis if empty (refs: #1042) Testing diff --git a/sphinx/ext/autodoc/directive.py b/sphinx/ext/autodoc/directive.py index f050b2ac4..0e19516ad 100644 --- a/sphinx/ext/autodoc/directive.py +++ b/sphinx/ext/autodoc/directive.py @@ -58,7 +58,7 @@ class DocumenterBridge(object): def warn(self, msg): # type: (unicode) -> None - logger.warning(msg, line=self.lineno) + logger.warning(msg, location=(self.env.docname, self.lineno)) def process_documenter_options(documenter, config, options): @@ -125,7 +125,7 @@ class AutodocDirective(Directive): except (KeyError, ValueError, TypeError) as exc: # an option is either unknown or has a wrong type logger.error('An option to %s is either unknown or has an invalid value: %s' % - (self.name, exc), line=lineno) + (self.name, exc), location=(source, lineno)) return [] # generate the output diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py index 6569d910c..042c3c554 100644 --- a/sphinx/util/inspect.py +++ b/sphinx/util/inspect.py @@ -114,7 +114,7 @@ else: # 2.7 func = func.func if not inspect.isfunction(func): raise TypeError('%r is not a Python function' % func) - args, varargs, varkw = inspect.getargs(func.__code__) # type: ignore + args, varargs, varkw = inspect.getargs(func.__code__) func_defaults = func.__defaults__ if func_defaults is None: func_defaults = [] @@ -124,13 +124,13 @@ else: # 2.7 args = args[parts[0]:] if parts[1]: for arg in parts[1]: - i = args.index(arg) - len(args) + i = args.index(arg) - len(args) # type: ignore del args[i] try: del func_defaults[i] except IndexError: pass - return inspect.ArgSpec(args, varargs, varkw, func_defaults) + return inspect.ArgSpec(args, varargs, varkw, func_defaults) # type: ignore try: import enum