Merged revisions 85276 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r85276 | georg.brandl | 2010-10-06 12:35:24 +0200 (Mi, 06 Okt 2010) | 1 line

  Fix the suspicious builder not to write CRLF, update suspicious file and add instructions to Makefile.
........
This commit is contained in:
Georg Brandl 2010-10-06 10:47:20 +00:00
parent 35e7a8fa53
commit 2471063dc7
3 changed files with 170 additions and 27 deletions

View File

@ -87,13 +87,14 @@ changes: build
linkcheck: BUILDER = linkcheck linkcheck: BUILDER = linkcheck
linkcheck: build linkcheck: build
@echo "Link check complete; look for any errors in the above output " \ @echo "Link check complete; look for any errors in the above output" \
"or in build/$(BUILDER)/output.txt" "or in build/$(BUILDER)/output.txt"
suspicious: BUILDER = suspicious suspicious: BUILDER = suspicious
suspicious: build suspicious: build
@echo "Suspicious check complete; look for any errors in the above output " \ @echo "Suspicious check complete; look for any errors in the above output" \
"or in build/$(BUILDER)/suspicious.txt" "or in build/$(BUILDER)/suspicious.csv. If all issues are false" \
"positives, append that file to tools/sphinxext/susp-ignored.csv."
coverage: BUILDER = coverage coverage: BUILDER = coverage
coverage: build coverage: build
@ -101,12 +102,12 @@ coverage: build
doctest: BUILDER = doctest doctest: BUILDER = doctest
doctest: build doctest: build
@echo "Testing of doctests in the sources finished, look at the " \ @echo "Testing of doctests in the sources finished, look at the" \
"results in build/doctest/output.txt" "results in build/doctest/output.txt"
pydoc-topics: BUILDER = pydoc-topics pydoc-topics: BUILDER = pydoc-topics
pydoc-topics: build pydoc-topics: build
@echo "Building finished; now copy build/pydoc-topics/topics.py " \ @echo "Building finished; now copy build/pydoc-topics/topics.py" \
"to Lib/pydoc_data/topics.py" "to Lib/pydoc_data/topics.py"
htmlview: html htmlview: html

View File

@ -164,3 +164,139 @@ whatsnew/2.4,,:System,
whatsnew/2.5,,:memory,:memory: whatsnew/2.5,,:memory,:memory:
whatsnew/2.5,,:step,[start:stop:step] whatsnew/2.5,,:step,[start:stop:step]
whatsnew/2.5,,:stop,[start:stop:step] whatsnew/2.5,,:stop,[start:stop:step]
distutils/examples,267,`,This is the description of the ``foobar`` package.
documenting/fromlatex,39,:func,:func:`str(object)`
documenting/fromlatex,39,`,:func:`str(object)`
documenting/fromlatex,39,`,``str(object)``
documenting/fromlatex,55,.. deprecated:,.. deprecated:: 2.5
documenting/fromlatex,66,.. note:,.. note::
documenting/fromlatex,76,:samp,":samp:`open({filename}, {mode})`"
documenting/fromlatex,76,`,":samp:`open({filename}, {mode})`"
documenting/fromlatex,80,`,``'c'``
documenting/fromlatex,80,`,`Title <URL>`_
documenting/fromlatex,80,`,``code``
documenting/fromlatex,80,`,`Title <URL>`_
documenting/fromlatex,99,:file,:file:`C:\\Temp\\my.tmp`
documenting/fromlatex,99,`,:file:`C:\\Temp\\my.tmp`
documenting/fromlatex,99,`,"``open(""C:\Temp\my.tmp"")``"
documenting/fromlatex,129,.. function:,.. function:: do_foo(bar)
documenting/fromlatex,141,.. function:,".. function:: open(filename[, mode[, buffering]])"
documenting/fromlatex,152,.. function:,.. function:: foo_*
documenting/fromlatex,152,:noindex,:noindex:
documenting/fromlatex,162,.. describe:,.. describe:: a == b
documenting/fromlatex,168,.. cmdoption:,.. cmdoption:: -O
documenting/fromlatex,168,.. envvar:,.. envvar:: PYTHONINSPECT
documenting/rest,33,`,``text``
documenting/rest,47,:rolename,:rolename:`content`
documenting/rest,47,`,:rolename:`content`
documenting/rest,103,::,This is a normal text paragraph. The next paragraph is a code sample::
documenting/rest,130,`,`Link text <http://target>`_
documenting/rest,187,.. function:,.. function:: foo(x)
documenting/rest,187,:bar,:bar: no
documenting/rest,208,.. rubric:,.. rubric:: Footnotes
faq/programming,,:reduce,"print (lambda Ru,Ro,Iu,Io,IM,Sx,Sy:reduce(lambda x,y:x+y,map(lambda y,"
faq/programming,,:reduce,"Sx=Sx,Sy=Sy:reduce(lambda x,y:x+y,map(lambda x,xc=Ru,yc=yc,Ru=Ru,Ro=Ro,"
faq/programming,,:chr,">=4.0) or 1+f(xc,yc,x*x-y*y+xc,2.0*x*y+yc,k-1,f):f(xc,yc,x,y,k,f):chr("
faq/programming,,::,for x in sequence[::-1]:
faq/windows,229,:EOF,@setlocal enableextensions & python -x %~f0 %* & goto :EOF
faq/windows,393,:REG,.py :REG_SZ: c:\<path to python>\python.exe -u %s %s
library/bisect,32,:hi,all(val >= x for val in a[i:hi])
library/bisect,42,:hi,all(val > x for val in a[i:hi])
library/http.client,52,:port,host:port
library/nntplib,,:bytes,:bytes
library/nntplib,,:lines,:lines
library/nntplib,,:lines,"['xref', 'from', ':lines', ':bytes', 'references', 'date', 'message-id', 'subject']"
library/nntplib,,:bytes,"['xref', 'from', ':lines', ':bytes', 'references', 'date', 'message-id', 'subject']"
library/pickle,567,:memory,"conn = sqlite3.connect("":memory:"")"
library/profile,293,:lineno,"(sort by filename:lineno),"
library/socket,,::,"(10, 1, 6, '', ('2001:888:2000:d::a2', 80, 0, 0))]"
library/stdtypes,,:end,s[start:end]
library/stdtypes,,:end,s[start:end]
license,,`,* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
license,,`,* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
license,,`,"``Software''), to deal in the Software without restriction, including"
license,,`,"THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,"
reference/lexical_analysis,704,`,$ ? `
whatsnew/2.7,735,:Sunday,'2009:4:Sunday'
whatsnew/2.7,862,::,"export PYTHONWARNINGS=all,error:::Cookie:0"
whatsnew/2.7,862,:Cookie,"export PYTHONWARNINGS=all,error:::Cookie:0"
whatsnew/2.7,,::,>>> urlparse.urlparse('http://[1080::8:800:200C:417A]/foo')
whatsnew/2.7,,::,"ParseResult(scheme='http', netloc='[1080::8:800:200C:417A]',"
documenting/markup,33,.. sectionauthor:,.. sectionauthor:: Guido van Rossum <guido@python.org>
documenting/markup,42,:mod,:mod:`parrot` -- Dead parrot access
documenting/markup,42,`,:mod:`parrot` -- Dead parrot access
documenting/markup,42,.. module:,.. module:: parrot
documenting/markup,42,:platform,":platform: Unix, Windows"
documenting/markup,42,:synopsis,:synopsis: Analyze and reanimate dead parrots.
documenting/markup,42,.. moduleauthor:,.. moduleauthor:: Eric Cleese <eric@python.invalid>
documenting/markup,42,.. moduleauthor:,.. moduleauthor:: John Idle <john@python.invalid>
documenting/markup,88,:noindex,:noindex:
documenting/markup,95,.. function:,.. function:: spam(eggs)
documenting/markup,95,:noindex,:noindex:
documenting/markup,101,.. method:,.. method:: FileInput.input(...)
documenting/markup,121,.. cfunction:,".. cfunction:: PyObject* PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)"
documenting/markup,131,.. cmember:,.. cmember:: PyObject* PyTypeObject.tp_bases
documenting/markup,150,.. cvar:,.. cvar:: PyObject* PyClass_Type
documenting/markup,179,.. function:,".. function:: Timer.repeat([repeat=3[, number=1000000]])"
documenting/markup,209,.. cmdoption:,.. cmdoption:: -m <module>
documenting/markup,227,.. describe:,.. describe:: opcode
documenting/markup,256,.. highlightlang:,.. highlightlang:: c
documenting/markup,276,.. literalinclude:,.. literalinclude:: example.py
documenting/markup,291,:rolename,:rolename:`content`
documenting/markup,291,`,:rolename:`content`
documenting/markup,296,:role,:role:`title <target>`
documenting/markup,296,`,:role:`title <target>`
documenting/markup,302,:meth,:meth:`~Queue.Queue.get`
documenting/markup,302,`,:meth:`~Queue.Queue.get`
documenting/markup,350,:func,:func:`filter`
documenting/markup,350,`,:func:`filter`
documenting/markup,350,:func,:func:`foo.filter`
documenting/markup,350,`,:func:`foo.filter`
documenting/markup,356,:func,:func:`open`
documenting/markup,356,`,:func:`open`
documenting/markup,356,:func,:func:`.open`
documenting/markup,356,`,:func:`.open`
documenting/markup,435,:file,... is installed in :file:`/usr/lib/python2.{x}/site-packages` ...
documenting/markup,435,`,... is installed in :file:`/usr/lib/python2.{x}/site-packages` ...
documenting/markup,454,:kbd,:kbd:`C-x C-f`
documenting/markup,454,`,:kbd:`C-x C-f`
documenting/markup,454,:kbd,:kbd:`Control-x Control-f`
documenting/markup,454,`,:kbd:`Control-x Control-f`
documenting/markup,468,:mailheader,:mailheader:`Content-Type`
documenting/markup,468,`,:mailheader:`Content-Type`
documenting/markup,477,:manpage,:manpage:`ls(1)`
documenting/markup,477,`,:manpage:`ls(1)`
documenting/markup,493,:menuselection,:menuselection:`Start --> Programs`
documenting/markup,493,`,:menuselection:`Start --> Programs`
documenting/markup,508,`,``code``
documenting/markup,526,:file,:file:
documenting/markup,526,`,``code``
documenting/markup,561,:ref,:ref:`label-name`
documenting/markup,561,`,:ref:`label-name`
documenting/markup,565,:ref,"It refers to the section itself, see :ref:`my-reference-label`."
documenting/markup,565,`,"It refers to the section itself, see :ref:`my-reference-label`."
documenting/markup,574,:ref,:ref:
documenting/markup,595,.. note:,.. note::
documenting/markup,622,.. versionadded:,.. versionadded:: 2.5
documenting/markup,647,::,.. impl-detail::
documenting/markup,647,::,.. impl-detail:: This shortly mentions an implementation detail.
documenting/markup,667,.. seealso:,.. seealso::
documenting/markup,667,:mod,Module :mod:`zipfile`
documenting/markup,667,`,Module :mod:`zipfile`
documenting/markup,667,:mod,Documentation of the :mod:`zipfile` standard module.
documenting/markup,667,`,Documentation of the :mod:`zipfile` standard module.
documenting/markup,667,`,"`GNU tar manual, Basic Tar Format <http://link>`_"
documenting/markup,681,.. centered:,.. centered::
documenting/markup,726,.. toctree:,.. toctree::
documenting/markup,726,:maxdepth,:maxdepth: 2
documenting/markup,742,.. index:,.. index::
documenting/markup,772,.. index:,".. index:: BNF, grammar, syntax, notation"
documenting/markup,803,`,"unaryneg ::= ""-"" `integer`"
documenting/markup,808,.. productionlist:,.. productionlist::
documenting/markup,808,`,"try1_stmt: ""try"" "":"" `suite`"
documenting/markup,808,`,": (""except"" [`expression` ["","" `target`]] "":"" `suite`)+"
documenting/markup,808,`,": [""else"" "":"" `suite`]"
documenting/markup,808,`,": [""finally"" "":"" `suite`]"
documenting/markup,808,`,"try2_stmt: ""try"" "":"" `suite`"
documenting/markup,808,`,": ""finally"" "":"" `suite`"
library/urllib2,67,:close,Connection:close

1 c-api/arg :ref PyArg_ParseTuple(args, "O|O:ref", &object, &callback)
164 whatsnew/2.5 :memory :memory:
165 whatsnew/2.5 :step [start:stop:step]
166 whatsnew/2.5 :stop [start:stop:step]
167 distutils/examples 267 ` This is the description of the ``foobar`` package.
168 documenting/fromlatex 39 :func :func:`str(object)`
169 documenting/fromlatex 39 ` :func:`str(object)`
170 documenting/fromlatex 39 ` ``str(object)``
171 documenting/fromlatex 55 .. deprecated: .. deprecated:: 2.5
172 documenting/fromlatex 66 .. note: .. note::
173 documenting/fromlatex 76 :samp :samp:`open({filename}, {mode})`
174 documenting/fromlatex 76 ` :samp:`open({filename}, {mode})`
175 documenting/fromlatex 80 ` ``'c'``
176 documenting/fromlatex 80 ` `Title <URL>`_
177 documenting/fromlatex 80 ` ``code``
178 documenting/fromlatex 80 ` `Title <URL>`_
179 documenting/fromlatex 99 :file :file:`C:\\Temp\\my.tmp`
180 documenting/fromlatex 99 ` :file:`C:\\Temp\\my.tmp`
181 documenting/fromlatex 99 ` ``open("C:\Temp\my.tmp")``
182 documenting/fromlatex 129 .. function: .. function:: do_foo(bar)
183 documenting/fromlatex 141 .. function: .. function:: open(filename[, mode[, buffering]])
184 documenting/fromlatex 152 .. function: .. function:: foo_*
185 documenting/fromlatex 152 :noindex :noindex:
186 documenting/fromlatex 162 .. describe: .. describe:: a == b
187 documenting/fromlatex 168 .. cmdoption: .. cmdoption:: -O
188 documenting/fromlatex 168 .. envvar: .. envvar:: PYTHONINSPECT
189 documenting/rest 33 ` ``text``
190 documenting/rest 47 :rolename :rolename:`content`
191 documenting/rest 47 ` :rolename:`content`
192 documenting/rest 103 :: This is a normal text paragraph. The next paragraph is a code sample::
193 documenting/rest 130 ` `Link text <http://target>`_
194 documenting/rest 187 .. function: .. function:: foo(x)
195 documenting/rest 187 :bar :bar: no
196 documenting/rest 208 .. rubric: .. rubric:: Footnotes
197 faq/programming :reduce print (lambda Ru,Ro,Iu,Io,IM,Sx,Sy:reduce(lambda x,y:x+y,map(lambda y,
198 faq/programming :reduce Sx=Sx,Sy=Sy:reduce(lambda x,y:x+y,map(lambda x,xc=Ru,yc=yc,Ru=Ru,Ro=Ro,
199 faq/programming :chr >=4.0) or 1+f(xc,yc,x*x-y*y+xc,2.0*x*y+yc,k-1,f):f(xc,yc,x,y,k,f):chr(
200 faq/programming :: for x in sequence[::-1]:
201 faq/windows 229 :EOF @setlocal enableextensions & python -x %~f0 %* & goto :EOF
202 faq/windows 393 :REG .py :REG_SZ: c:\<path to python>\python.exe -u %s %s
203 library/bisect 32 :hi all(val >= x for val in a[i:hi])
204 library/bisect 42 :hi all(val > x for val in a[i:hi])
205 library/http.client 52 :port host:port
206 library/nntplib :bytes :bytes
207 library/nntplib :lines :lines
208 library/nntplib :lines ['xref', 'from', ':lines', ':bytes', 'references', 'date', 'message-id', 'subject']
209 library/nntplib :bytes ['xref', 'from', ':lines', ':bytes', 'references', 'date', 'message-id', 'subject']
210 library/pickle 567 :memory conn = sqlite3.connect(":memory:")
211 library/profile 293 :lineno (sort by filename:lineno),
212 library/socket :: (10, 1, 6, '', ('2001:888:2000:d::a2', 80, 0, 0))]
213 library/stdtypes :end s[start:end]
214 library/stdtypes :end s[start:end]
215 license ` * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
216 license ` * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
217 license ` ``Software''), to deal in the Software without restriction, including
218 license ` THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
219 reference/lexical_analysis 704 ` $ ? `
220 whatsnew/2.7 735 :Sunday '2009:4:Sunday'
221 whatsnew/2.7 862 :: export PYTHONWARNINGS=all,error:::Cookie:0
222 whatsnew/2.7 862 :Cookie export PYTHONWARNINGS=all,error:::Cookie:0
223 whatsnew/2.7 :: >>> urlparse.urlparse('http://[1080::8:800:200C:417A]/foo')
224 whatsnew/2.7 :: ParseResult(scheme='http', netloc='[1080::8:800:200C:417A]',
225 documenting/markup 33 .. sectionauthor: .. sectionauthor:: Guido van Rossum <guido@python.org>
226 documenting/markup 42 :mod :mod:`parrot` -- Dead parrot access
227 documenting/markup 42 ` :mod:`parrot` -- Dead parrot access
228 documenting/markup 42 .. module: .. module:: parrot
229 documenting/markup 42 :platform :platform: Unix, Windows
230 documenting/markup 42 :synopsis :synopsis: Analyze and reanimate dead parrots.
231 documenting/markup 42 .. moduleauthor: .. moduleauthor:: Eric Cleese <eric@python.invalid>
232 documenting/markup 42 .. moduleauthor: .. moduleauthor:: John Idle <john@python.invalid>
233 documenting/markup 88 :noindex :noindex:
234 documenting/markup 95 .. function: .. function:: spam(eggs)
235 documenting/markup 95 :noindex :noindex:
236 documenting/markup 101 .. method: .. method:: FileInput.input(...)
237 documenting/markup 121 .. cfunction: .. cfunction:: PyObject* PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
238 documenting/markup 131 .. cmember: .. cmember:: PyObject* PyTypeObject.tp_bases
239 documenting/markup 150 .. cvar: .. cvar:: PyObject* PyClass_Type
240 documenting/markup 179 .. function: .. function:: Timer.repeat([repeat=3[, number=1000000]])
241 documenting/markup 209 .. cmdoption: .. cmdoption:: -m <module>
242 documenting/markup 227 .. describe: .. describe:: opcode
243 documenting/markup 256 .. highlightlang: .. highlightlang:: c
244 documenting/markup 276 .. literalinclude: .. literalinclude:: example.py
245 documenting/markup 291 :rolename :rolename:`content`
246 documenting/markup 291 ` :rolename:`content`
247 documenting/markup 296 :role :role:`title <target>`
248 documenting/markup 296 ` :role:`title <target>`
249 documenting/markup 302 :meth :meth:`~Queue.Queue.get`
250 documenting/markup 302 ` :meth:`~Queue.Queue.get`
251 documenting/markup 350 :func :func:`filter`
252 documenting/markup 350 ` :func:`filter`
253 documenting/markup 350 :func :func:`foo.filter`
254 documenting/markup 350 ` :func:`foo.filter`
255 documenting/markup 356 :func :func:`open`
256 documenting/markup 356 ` :func:`open`
257 documenting/markup 356 :func :func:`.open`
258 documenting/markup 356 ` :func:`.open`
259 documenting/markup 435 :file ... is installed in :file:`/usr/lib/python2.{x}/site-packages` ...
260 documenting/markup 435 ` ... is installed in :file:`/usr/lib/python2.{x}/site-packages` ...
261 documenting/markup 454 :kbd :kbd:`C-x C-f`
262 documenting/markup 454 ` :kbd:`C-x C-f`
263 documenting/markup 454 :kbd :kbd:`Control-x Control-f`
264 documenting/markup 454 ` :kbd:`Control-x Control-f`
265 documenting/markup 468 :mailheader :mailheader:`Content-Type`
266 documenting/markup 468 ` :mailheader:`Content-Type`
267 documenting/markup 477 :manpage :manpage:`ls(1)`
268 documenting/markup 477 ` :manpage:`ls(1)`
269 documenting/markup 493 :menuselection :menuselection:`Start --> Programs`
270 documenting/markup 493 ` :menuselection:`Start --> Programs`
271 documenting/markup 508 ` ``code``
272 documenting/markup 526 :file :file:
273 documenting/markup 526 ` ``code``
274 documenting/markup 561 :ref :ref:`label-name`
275 documenting/markup 561 ` :ref:`label-name`
276 documenting/markup 565 :ref It refers to the section itself, see :ref:`my-reference-label`.
277 documenting/markup 565 ` It refers to the section itself, see :ref:`my-reference-label`.
278 documenting/markup 574 :ref :ref:
279 documenting/markup 595 .. note: .. note::
280 documenting/markup 622 .. versionadded: .. versionadded:: 2.5
281 documenting/markup 647 :: .. impl-detail::
282 documenting/markup 647 :: .. impl-detail:: This shortly mentions an implementation detail.
283 documenting/markup 667 .. seealso: .. seealso::
284 documenting/markup 667 :mod Module :mod:`zipfile`
285 documenting/markup 667 ` Module :mod:`zipfile`
286 documenting/markup 667 :mod Documentation of the :mod:`zipfile` standard module.
287 documenting/markup 667 ` Documentation of the :mod:`zipfile` standard module.
288 documenting/markup 667 ` `GNU tar manual, Basic Tar Format <http://link>`_
289 documenting/markup 681 .. centered: .. centered::
290 documenting/markup 726 .. toctree: .. toctree::
291 documenting/markup 726 :maxdepth :maxdepth: 2
292 documenting/markup 742 .. index: .. index::
293 documenting/markup 772 .. index: .. index:: BNF, grammar, syntax, notation
294 documenting/markup 803 ` unaryneg ::= "-" `integer`
295 documenting/markup 808 .. productionlist: .. productionlist::
296 documenting/markup 808 ` try1_stmt: "try" ":" `suite`
297 documenting/markup 808 ` : ("except" [`expression` ["," `target`]] ":" `suite`)+
298 documenting/markup 808 ` : ["else" ":" `suite`]
299 documenting/markup 808 ` : ["finally" ":" `suite`]
300 documenting/markup 808 ` try2_stmt: "try" ":" `suite`
301 documenting/markup 808 ` : "finally" ":" `suite`
302 library/urllib2 67 :close Connection:close

View File

@ -41,9 +41,11 @@ Copyright 2009 Gabriel A. Genellina
""" """
import os, sys import os
import csv
import re import re
import csv
import sys
from docutils import nodes from docutils import nodes
from sphinx.builders import Builder from sphinx.builders import Builder
@ -54,9 +56,10 @@ detect_all = re.compile(ur'''
(?<!\.)\.\.[ \t]*\w+: # .. foo: (but NOT ... else:) (?<!\.)\.\.[ \t]*\w+: # .. foo: (but NOT ... else:)
''', re.UNICODE | re.VERBOSE).finditer ''', re.UNICODE | re.VERBOSE).finditer
class Rule: class Rule:
def __init__(self, docname, lineno, issue, line): def __init__(self, docname, lineno, issue, line):
"A rule for ignoring issues" """A rule for ignoring issues"""
self.docname = docname # document to which this rule applies self.docname = docname # document to which this rule applies
self.lineno = lineno # line number in the original source; self.lineno = lineno # line number in the original source;
# this rule matches only near that. # this rule matches only near that.
@ -65,9 +68,15 @@ class Rule:
self.line = line # text of the container element (single line only) self.line = line # text of the container element (single line only)
class dialect(csv.excel):
"""Our dialect: uses only linefeed as newline."""
lineterminator = '\n'
class CheckSuspiciousMarkupBuilder(Builder): class CheckSuspiciousMarkupBuilder(Builder):
""" """
Checks for possibly invalid markup that may leak into the output Checks for possibly invalid markup that may leak into the output.
""" """
name = 'suspicious' name = 'suspicious'
@ -76,7 +85,8 @@ class CheckSuspiciousMarkupBuilder(Builder):
self.log_file_name = os.path.join(self.outdir, 'suspicious.csv') self.log_file_name = os.path.join(self.outdir, 'suspicious.csv')
open(self.log_file_name, 'w').close() open(self.log_file_name, 'w').close()
# load database of previously ignored issues # load database of previously ignored issues
self.load_rules(os.path.join(os.path.dirname(__file__), 'susp-ignored.csv')) self.load_rules(os.path.join(os.path.dirname(__file__),
'susp-ignored.csv'))
def get_outdated_docs(self): def get_outdated_docs(self):
return self.env.found_docs return self.env.found_docs
@ -85,14 +95,11 @@ class CheckSuspiciousMarkupBuilder(Builder):
return '' return ''
def prepare_writing(self, docnames): def prepare_writing(self, docnames):
### PYTHON PROJECT SPECIFIC ### pass
for name in set(docnames):
if name.split('/', 1)[0] == 'documenting':
docnames.remove(name)
### PYTHON PROJECT SPECIFIC ###
def write_doc(self, docname, doctree): def write_doc(self, docname, doctree):
self.any_issue = False # set when any issue is encountered in this document # set when any issue is encountered in this document
self.any_issue = False
self.docname = docname self.docname = docname
visitor = SuspiciousVisitor(doctree, self) visitor = SuspiciousVisitor(doctree, self)
doctree.walk(visitor) doctree.walk(visitor)
@ -105,8 +112,7 @@ class CheckSuspiciousMarkupBuilder(Builder):
self.report_issue(line, lineno, issue) self.report_issue(line, lineno, issue)
def is_ignored(self, line, lineno, issue): def is_ignored(self, line, lineno, issue):
"""Determine whether this issue should be ignored. """Determine whether this issue should be ignored."""
"""
docname = self.docname docname = self.docname
for rule in self.rules: for rule in self.rules:
if rule.docname != docname: continue if rule.docname != docname: continue
@ -139,12 +145,11 @@ class CheckSuspiciousMarkupBuilder(Builder):
def write_log_entry(self, lineno, issue, text): def write_log_entry(self, lineno, issue, text):
f = open(self.log_file_name, 'ab') f = open(self.log_file_name, 'ab')
writer = csv.writer(f) writer = csv.writer(f, dialect)
writer.writerow([self.docname.encode('utf-8'), writer.writerow([self.docname.encode('utf-8'),
lineno, lineno,
issue.encode('utf-8'), issue.encode('utf-8'),
text.strip().encode('utf-8')]) text.strip().encode('utf-8')])
del writer
f.close() f.close()
def load_rules(self, filename): def load_rules(self, filename):
@ -159,7 +164,8 @@ class CheckSuspiciousMarkupBuilder(Builder):
except IOError: return except IOError: return
for i, row in enumerate(csv.reader(f)): for i, row in enumerate(csv.reader(f)):
if len(row) != 4: if len(row) != 4:
raise ValueError("wrong format in %s, line %d: %s" % (filename, i+1, row)) raise ValueError(
"wrong format in %s, line %d: %s" % (filename, i+1, row))
docname, lineno, issue, text = row docname, lineno, issue, text = row
docname = docname.decode('utf-8') docname = docname.decode('utf-8')
if lineno: lineno = int(lineno) if lineno: lineno = int(lineno)
@ -173,7 +179,7 @@ class CheckSuspiciousMarkupBuilder(Builder):
def get_lineno(node): def get_lineno(node):
"Obtain line number information for a node" """Obtain line number information for a node."""
lineno = None lineno = None
while lineno is None and node: while lineno is None and node:
node = node.parent node = node.parent
@ -198,7 +204,8 @@ def extract_line(text, index):
""" """
p = text.rfind('\n', 0, index) + 1 p = text.rfind('\n', 0, index) + 1
q = text.find('\n', index) q = text.find('\n', index)
if q<0: q = len(text) if q < 0:
q = len(text)
return text[p:q] return text[p:q]
@ -217,7 +224,6 @@ class SuspiciousVisitor(nodes.GenericNodeVisitor):
self.lastlineno = lineno = max(get_lineno(node) or 0, self.lastlineno) self.lastlineno = lineno = max(get_lineno(node) or 0, self.lastlineno)
seen = set() # don't report the same issue more than only once per line seen = set() # don't report the same issue more than only once per line
for match in detect_all(text): for match in detect_all(text):
#import pdb; pdb.set_trace()
issue = match.group() issue = match.group()
line = extract_line(text, match.start()) line = extract_line(text, match.start())
if (issue, line) not in seen: if (issue, line) not in seen: