darglint icon indicating copy to clipboard operation
darglint copied to clipboard

Unable to leave noqa outside of docstring

Open adithyabsk opened this issue 5 years ago • 8 comments

When the noqa is placed outside of the docstring, it is not respected as it works in pydocstyle http://www.pydocstyle.org/en/2.1.1/usage.html. Would greatly appreciate if this could be implemented as otherwise the noqa shows up in the html of the doc.

adithyabsk avatar May 16 '19 21:05 adithyabsk

That may be possible. Currently, darglint reads the file and then uses the ast module to parse the python source. ast doesn't provide comments. Obviously, we could do a search of the file contents to identify the noqas, but then the line numbers would have to be matched with the docstring line numbers. The logic for that could be kind of convoluted.

I'll give it some thought, and if it can be done somewhat reliably I'll attempt it. If it's too slow, I may hide it behind a flag, though. I'm open for suggestions for implementation if you have any.

terrencepreilly avatar May 17 '19 04:05 terrencepreilly

Thanks for looking into the idea! This is a real showstopper for adopting this plugin due auto-documentation. Otherwise the noqa's show up in readthedocs when using sphinx.

Not sure how pydocstyle does it but a thought could be to use ast's to get the containing header (module, class, function) and search the file for the noqa on the line(s) defining it.

adithyabsk avatar May 17 '19 04:05 adithyabsk

but then the line numbers would have to be matched with the docstring line numbers. The logic for that could be kind of convoluted.

Just quickly glanced at pydocstyle, and it looks like # noqa use is limited to the function signature. I don't you would need to check the docstring lines.

rpkilby avatar May 17 '19 18:05 rpkilby

Thanks, @rpkilby. I took a look as well. It seems that pydocstyle uses the tokenize module, rather than ast. In fact, that may be the more efficient approach, since it would skip the parsing step. You're right that once the docstring is found, finding the appropriate # noqa should be simple.

terrencepreilly avatar May 18 '19 18:05 terrencepreilly

While I would still love for this feature to be implemented to be consistent with pycodestyle I found a workaround to implement this package for my use case. Simply using sphinx's comment to prevent the text from showing up in the docstring works.

@property
def attr(self):
"""Some attr

:gettr: Returns attr

:setter: verfies attr before setting

:type: attr type

.. # noqa: I201
"""
    return self._attr

adithyabsk avatar Jun 04 '19 21:06 adithyabsk

Another workaround I just found to hide the noqa from the IDEs as well is to use a markdown comment (actually an HTML one)

@property
def attr(self):
"""Some attr

:gettr: Returns attr

:setter: verfies attr before setting

:type: attr type
<!---
# noqa: I201
-->
"""
    return self._attr

art049 avatar Sep 21 '20 22:09 art049

When using numpy style docstrings @art049 's workaround doesn't work. For @adithyabsk's workaround to work properly, you need to have at least two blank lines above the noqa.

IMHO this should be the example in the docs.

s-weigand avatar Oct 12 '20 13:10 s-weigand

Unfortunately neither workaround hides the directives from help(foo).

To follow up on @terrencepreilly's reply to #148 which I opened about the same issue (didn't realise there was an open bug already):

Whenever possible, docstrings shouldn't need to use noqa statements.

There are a number of cases where Darglint generates false positives under certain circumstances, so #noqa is needed to handle these, especially if for example linting is part of a CI process (necessitating a "pass" from the linter).

Where that's not practical because of a project's existing style, then it should be ignored in the configuration.

This means errors in that category that aren't false positives would be missed.

I don't think it decreases the docstring clarity.

I'd respectfully disagree - IMO linter directives should never show up in help() or in generated documentation.

stephen-dexda avatar Jan 16 '21 21:01 stephen-dexda