mirror of https://github.com/python/cpython
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:
parent
35e7a8fa53
commit
2471063dc7
11
Doc/Makefile
11
Doc/Makefile
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue