Kaydet (Commit) c3a98034 authored tarafından Georg Brandl's avatar Georg Brandl

Patch #4739 by David Laban: add symbols to pydoc help topics,

so that ``help('@')`` works as expected.
üst bedc3431
...@@ -1574,6 +1574,42 @@ class Helper: ...@@ -1574,6 +1574,42 @@ class Helper:
'with': ('with', 'CONTEXTMANAGERS EXCEPTIONS yield'), 'with': ('with', 'CONTEXTMANAGERS EXCEPTIONS yield'),
'yield': ('yield', ''), 'yield': ('yield', ''),
} }
# Either add symbols to this dictionary or to the symbols dictionary
# directly: Whichever is easier. They are merged later.
_symbols_inverse = {
'STRINGS' : ("'", "'''", "r'", "u'", '"""', '"', 'r"', 'u"'),
'OPERATORS' : ('+', '-', '*', '**', '/', '//', '%', '<<', '>>', '&',
'|', '^', '~', '<', '>', '<=', '>=', '==', '!=', '<>'),
'COMPARISON' : ('<', '>', '<=', '>=', '==', '!=', '<>'),
'UNARY' : ('-', '~'),
'AUGMENTEDASSIGNMENT' : ('+=', '-=', '*=', '/=', '%=', '&=', '|=',
'^=', '<<=', '>>=', '**=', '//='),
'BITWISE' : ('<<', '>>', '&', '|', '^', '~'),
'COMPLEX' : ('j', 'J')
}
symbols = {
'%': 'OPERATORS FORMATTING',
'**': 'POWER',
',': 'TUPLES LISTS FUNCTIONS',
'.': 'ATTRIBUTES FLOAT MODULES OBJECTS',
'...': 'ELLIPSIS',
':': 'SLICINGS DICTIONARYLITERALS',
'@': 'def class',
'\\': 'STRINGS',
'_': 'PRIVATENAMES',
'__': 'PRIVATENAMES SPECIALMETHODS',
'`': 'BACKQUOTES',
'(': 'TUPLES FUNCTIONS CALLS',
')': 'TUPLES FUNCTIONS CALLS',
'[': 'LISTS SUBSCRIPTS SLICINGS',
']': 'LISTS SUBSCRIPTS SLICINGS'
}
for topic, symbols_ in _symbols_inverse.iteritems():
for symbol in symbols_:
topics = symbols.get(symbol, topic)
if topic not in topics:
topics = topics + ' ' + topic
symbols[symbol] = topics
topics = { topics = {
'TYPES': ('types', 'STRINGS UNICODE NUMBERS SEQUENCES MAPPINGS ' 'TYPES': ('types', 'STRINGS UNICODE NUMBERS SEQUENCES MAPPINGS '
...@@ -1717,10 +1753,12 @@ has the same effect as typing a particular string at the help> prompt. ...@@ -1717,10 +1753,12 @@ has the same effect as typing a particular string at the help> prompt.
if type(request) is type(''): if type(request) is type(''):
if request == 'help': self.intro() if request == 'help': self.intro()
elif request == 'keywords': self.listkeywords() elif request == 'keywords': self.listkeywords()
elif request == 'symbols': self.listsymbols()
elif request == 'topics': self.listtopics() elif request == 'topics': self.listtopics()
elif request == 'modules': self.listmodules() elif request == 'modules': self.listmodules()
elif request[:8] == 'modules ': elif request[:8] == 'modules ':
self.listmodules(split(request)[1]) self.listmodules(split(request)[1])
elif request in self.symbols: self.showsymbol(request)
elif request in self.keywords: self.showtopic(request) elif request in self.keywords: self.showtopic(request)
elif request in self.topics: self.showtopic(request) elif request in self.topics: self.showtopic(request)
elif request: doc(request, 'Help on %s:') elif request: doc(request, 'Help on %s:')
...@@ -1766,6 +1804,14 @@ Here is a list of the Python keywords. Enter any keyword to get more help. ...@@ -1766,6 +1804,14 @@ Here is a list of the Python keywords. Enter any keyword to get more help.
''') ''')
self.list(self.keywords.keys()) self.list(self.keywords.keys())
def listsymbols(self):
self.output.write('''
Here is a list of the punctuation symbols which Python assigns special meaning
to. Enter any symbol to get more help.
''')
self.list(self.symbols.keys())
def listtopics(self): def listtopics(self):
self.output.write(''' self.output.write('''
Here is a list of available topics. Enter any topic name to get more help. Here is a list of available topics. Enter any topic name to get more help.
...@@ -1773,7 +1819,7 @@ Here is a list of available topics. Enter any topic name to get more help. ...@@ -1773,7 +1819,7 @@ Here is a list of available topics. Enter any topic name to get more help.
''') ''')
self.list(self.topics.keys()) self.list(self.topics.keys())
def showtopic(self, topic): def showtopic(self, topic, more_xrefs=''):
try: try:
import pydoc_topics import pydoc_topics
except ImportError: except ImportError:
...@@ -1787,7 +1833,7 @@ module "pydoc_topics" could not be found. ...@@ -1787,7 +1833,7 @@ module "pydoc_topics" could not be found.
self.output.write('no documentation found for %s\n' % repr(topic)) self.output.write('no documentation found for %s\n' % repr(topic))
return return
if type(target) is type(''): if type(target) is type(''):
return self.showtopic(target) return self.showtopic(target, more_xrefs)
label, xrefs = target label, xrefs = target
try: try:
...@@ -1796,6 +1842,8 @@ module "pydoc_topics" could not be found. ...@@ -1796,6 +1842,8 @@ module "pydoc_topics" could not be found.
self.output.write('no documentation found for %s\n' % repr(topic)) self.output.write('no documentation found for %s\n' % repr(topic))
return return
pager(strip(doc) + '\n') pager(strip(doc) + '\n')
if more_xrefs:
xrefs = (xrefs or '') + ' ' + more_xrefs
if xrefs: if xrefs:
import StringIO, formatter import StringIO, formatter
buffer = StringIO.StringIO() buffer = StringIO.StringIO()
...@@ -1803,6 +1851,11 @@ module "pydoc_topics" could not be found. ...@@ -1803,6 +1851,11 @@ module "pydoc_topics" could not be found.
'Related help topics: ' + join(split(xrefs), ', ') + '\n') 'Related help topics: ' + join(split(xrefs), ', ') + '\n')
self.output.write('\n%s\n' % buffer.getvalue()) self.output.write('\n%s\n' % buffer.getvalue())
def showsymbol(self, symbol):
target = self.symbols[symbol]
topic, _, xrefs = target.partition(' ')
self.showtopic(topic, xrefs)
def listmodules(self, key=''): def listmodules(self, key=''):
if key: if key:
self.output.write(''' self.output.write('''
......
...@@ -86,6 +86,9 @@ Core and Builtins ...@@ -86,6 +86,9 @@ Core and Builtins
Library Library
------- -------
- Issue #4739: Add pydoc help topics for symbols, so that e.g. help('@')
works as expected in the interactive environment.
- Issue #4756: zipfile.is_zipfile() now supports file-like objects. Patch by - Issue #4756: zipfile.is_zipfile() now supports file-like objects. Patch by
Gabriel Genellina. Gabriel Genellina.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment