Mercurial > cpython-lru_cache-weakref
annotate Lib/idlelib/CodeContext.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | ef4cca2d6171 |
| children |
| rev | line source |
|---|---|
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
1 """CodeContext - Extension to display the block context above the edit window |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
2 |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
3 Once code has scrolled off the top of a window, it can be difficult to |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
4 determine which block you are in. This extension implements a pane at the top |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
5 of each IDLE edit window which provides block structure hints. These hints are |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
6 the lines which contain the block opening keywords, e.g. 'if', for the |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
7 enclosing block. The number of hint lines is determined by the numlines |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
8 variable in the CodeContext section of config-extensions.def. Lines which do |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
9 not open blocks are not shown in the context hints pane. |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
10 |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
11 """ |
|
47130
ef4cca2d6171
Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents:
44277
diff
changeset
|
12 import tkinter |
|
ef4cca2d6171
Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents:
44277
diff
changeset
|
13 from tkinter.constants import TOP, LEFT, X, W, SUNKEN |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
14 import re |
|
44277
9a09d442bce2
maxint->maxsize. Wouldn't import.
Kurt B. Kaiser <kbk@shore.net>
parents:
42714
diff
changeset
|
15 from sys import maxsize as INFINITY |
|
42714
2ec16b6b4d04
Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents:
42324
diff
changeset
|
16 from idlelib.configHandler import idleConf |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
17 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
35691
diff
changeset
|
18 BLOCKOPENERS = set(["class", "def", "elif", "else", "except", "finally", "for", |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
19 "if", "try", "while", "with"]) |
|
31947
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
20 UPDATEINTERVAL = 100 # millisec |
|
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
21 FONTUPDATEINTERVAL = 1000 # millisec |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
22 |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
23 getspacesfirstword =\ |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
24 lambda s, c=re.compile(r"^(\s*)(\w*)"): c.match(s).groups() |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
25 |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
26 class CodeContext: |
|
31947
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
27 menudefs = [('options', [('!Code Conte_xt', '<<toggle-code-context>>')])] |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
28 context_depth = idleConf.GetOption("extensions", "CodeContext", |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
29 "numlines", type="int", default=3) |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
30 bgcolor = idleConf.GetOption("extensions", "CodeContext", |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
31 "bgcolor", type="str", default="LightGray") |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
32 fgcolor = idleConf.GetOption("extensions", "CodeContext", |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
33 "fgcolor", type="str", default="Black") |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
34 def __init__(self, editwin): |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
35 self.editwin = editwin |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
36 self.text = editwin.text |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
37 self.textfont = self.text["font"] |
|
31947
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
38 self.label = None |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
39 # self.info is a list of (line number, indent level, line text, block |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
40 # keyword) tuples providing the block structure associated with |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
41 # self.topvisible (the linenumber of the line displayed at the top of |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
42 # the edit window). self.info[0] is initialized as a 'dummy' line which |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
43 # starts the toplevel 'block' of the module. |
|
35668
84541731b166
Increased performance in CodeContext extension Patch 936169 Noam Raphael
Kurt B. Kaiser <kbk@shore.net>
parents:
32272
diff
changeset
|
44 self.info = [(0, -1, "", False)] |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
45 self.topvisible = 1 |
|
32272
014b0d84422f
Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents:
31949
diff
changeset
|
46 visible = idleConf.GetOption("extensions", "CodeContext", |
|
014b0d84422f
Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents:
31949
diff
changeset
|
47 "visible", type="bool", default=False) |
|
014b0d84422f
Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents:
31949
diff
changeset
|
48 if visible: |
|
31947
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
49 self.toggle_code_context_event() |
|
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
50 self.editwin.setvar('<<toggle-code-context>>', True) |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
51 # Start two update cycles, one for context lines, one for font changes. |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
52 self.text.after(UPDATEINTERVAL, self.timer_event) |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
53 self.text.after(FONTUPDATEINTERVAL, self.font_timer_event) |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
54 |
|
31947
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
55 def toggle_code_context_event(self, event=None): |
|
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
56 if not self.label: |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
57 # Calculate the border width and horizontal padding required to |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
58 # align the context with the text in the main Text widget. |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
59 # |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
60 # All values are passed through int(str(<value>)), since some |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
61 # values may be pixel objects, which can't simply be added to ints. |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
62 widgets = self.editwin.text, self.editwin.text_frame |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
63 # Calculate the required vertical padding |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
64 padx = 0 |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
65 for widget in widgets: |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
66 padx += int(str( widget.pack_info()['padx'] )) |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
67 padx += int(str( widget.cget('padx') )) |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
68 # Calculate the required border width |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
69 border = 0 |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
70 for widget in widgets: |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
71 border += int(str( widget.cget('border') )) |
|
47130
ef4cca2d6171
Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents:
44277
diff
changeset
|
72 self.label = tkinter.Label(self.editwin.top, |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
73 text="\n" * (self.context_depth - 1), |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
74 anchor=W, justify=LEFT, |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
75 font=self.textfont, |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
76 bg=self.bgcolor, fg=self.fgcolor, |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
77 width=1, #don't request more than we get |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
78 padx=padx, border=border, |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
79 relief=SUNKEN) |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
80 # Pack the label widget before and above the text_frame widget, |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
81 # thus ensuring that it will appear directly above text_frame |
|
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40742
diff
changeset
|
82 self.label.pack(side=TOP, fill=X, expand=False, |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
83 before=self.editwin.text_frame) |
|
31947
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
84 else: |
|
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
85 self.label.destroy() |
|
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
86 self.label = None |
|
32272
014b0d84422f
Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents:
31949
diff
changeset
|
87 idleConf.SetOption("extensions", "CodeContext", "visible", |
|
014b0d84422f
Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents:
31949
diff
changeset
|
88 str(self.label is not None)) |
|
014b0d84422f
Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents:
31949
diff
changeset
|
89 idleConf.SaveUserCfgFiles() |
|
31947
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
90 |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
91 def get_line_info(self, linenum): |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
92 """Get the line indent value, text, and any block start keyword |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
93 |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
94 If the line does not start a block, the keyword value is False. |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
95 The indentation of empty lines (or comment lines) is INFINITY. |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
96 |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
97 """ |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
98 text = self.text.get("%d.0" % linenum, "%d.end" % linenum) |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
99 spaces, firstword = getspacesfirstword(text) |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
100 opener = firstword in BLOCKOPENERS and firstword |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
101 if len(text) == len(spaces) or text[len(spaces)] == '#': |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
102 indent = INFINITY |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
103 else: |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
104 indent = len(spaces) |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
105 return indent, text, opener |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
106 |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
107 def get_context(self, new_topvisible, stopline=1, stopindent=0): |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
108 """Get context lines, starting at new_topvisible and working backwards. |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
109 |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
110 Stop when stopline or stopindent is reached. Return a tuple of context |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
111 data and the indent level at the top of the region inspected. |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
112 |
|
35668
84541731b166
Increased performance in CodeContext extension Patch 936169 Noam Raphael
Kurt B. Kaiser <kbk@shore.net>
parents:
32272
diff
changeset
|
113 """ |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
114 assert stopline > 0 |
|
35668
84541731b166
Increased performance in CodeContext extension Patch 936169 Noam Raphael
Kurt B. Kaiser <kbk@shore.net>
parents:
32272
diff
changeset
|
115 lines = [] |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
116 # The indentation level we are currently in: |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
117 lastindent = INFINITY |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
118 # For a line to be interesting, it must begin with a block opening |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
119 # keyword, and have less indentation than lastindent. |
|
41642
a6eb6acfe04a
Merged revisions 55007-55179 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40893
diff
changeset
|
120 for linenum in range(new_topvisible, stopline-1, -1): |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
121 indent, text, opener = self.get_line_info(linenum) |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
122 if indent < lastindent: |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
123 lastindent = indent |
|
31949
3838cdee1a20
Fix a bug I introduced which causes all block openers at an indent level
Kurt B. Kaiser <kbk@shore.net>
parents:
31947
diff
changeset
|
124 if opener in ("else", "elif"): |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
125 # We also show the if statement |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
126 lastindent += 1 |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
127 if opener and linenum < new_topvisible and indent >= stopindent: |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
128 lines.append((linenum, indent, text, opener)) |
|
35668
84541731b166
Increased performance in CodeContext extension Patch 936169 Noam Raphael
Kurt B. Kaiser <kbk@shore.net>
parents:
32272
diff
changeset
|
129 if lastindent <= stopindent: |
|
84541731b166
Increased performance in CodeContext extension Patch 936169 Noam Raphael
Kurt B. Kaiser <kbk@shore.net>
parents:
32272
diff
changeset
|
130 break |
|
84541731b166
Increased performance in CodeContext extension Patch 936169 Noam Raphael
Kurt B. Kaiser <kbk@shore.net>
parents:
32272
diff
changeset
|
131 lines.reverse() |
|
84541731b166
Increased performance in CodeContext extension Patch 936169 Noam Raphael
Kurt B. Kaiser <kbk@shore.net>
parents:
32272
diff
changeset
|
132 return lines, lastindent |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
133 |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
134 def update_code_context(self): |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
135 """Update context information and lines visible in the context pane. |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
136 |
|
35668
84541731b166
Increased performance in CodeContext extension Patch 936169 Noam Raphael
Kurt B. Kaiser <kbk@shore.net>
parents:
32272
diff
changeset
|
137 """ |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
138 new_topvisible = int(self.text.index("@0,0").split('.')[0]) |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
139 if self.topvisible == new_topvisible: # haven't scrolled |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
140 return |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
141 if self.topvisible < new_topvisible: # scroll down |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
142 lines, lastindent = self.get_context(new_topvisible, |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
143 self.topvisible) |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
144 # retain only context info applicable to the region |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
145 # between topvisible and new_topvisible: |
|
35668
84541731b166
Increased performance in CodeContext extension Patch 936169 Noam Raphael
Kurt B. Kaiser <kbk@shore.net>
parents:
32272
diff
changeset
|
146 while self.info[-1][1] >= lastindent: |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
147 del self.info[-1] |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
148 elif self.topvisible > new_topvisible: # scroll up |
|
35668
84541731b166
Increased performance in CodeContext extension Patch 936169 Noam Raphael
Kurt B. Kaiser <kbk@shore.net>
parents:
32272
diff
changeset
|
149 stopindent = self.info[-1][1] + 1 |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
150 # retain only context info associated |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
151 # with lines above new_topvisible: |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
152 while self.info[-1][0] >= new_topvisible: |
|
35668
84541731b166
Increased performance in CodeContext extension Patch 936169 Noam Raphael
Kurt B. Kaiser <kbk@shore.net>
parents:
32272
diff
changeset
|
153 stopindent = self.info[-1][1] |
|
84541731b166
Increased performance in CodeContext extension Patch 936169 Noam Raphael
Kurt B. Kaiser <kbk@shore.net>
parents:
32272
diff
changeset
|
154 del self.info[-1] |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
155 lines, lastindent = self.get_context(new_topvisible, |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
156 self.info[-1][0]+1, |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
157 stopindent) |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
158 self.info.extend(lines) |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
159 self.topvisible = new_topvisible |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
160 # empty lines in context pane: |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
161 context_strings = [""] * max(0, self.context_depth - len(self.info)) |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
162 # followed by the context hint lines: |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
163 context_strings += [x[2] for x in self.info[-self.context_depth:]] |
|
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
164 self.label["text"] = '\n'.join(context_strings) |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
165 |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
166 def timer_event(self): |
|
31947
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
167 if self.label: |
|
35690
548bad215429
Tweak CodeContext.py docstrings, comments, and names.
Kurt B. Kaiser <kbk@shore.net>
parents:
35668
diff
changeset
|
168 self.update_code_context() |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
169 self.text.after(UPDATEINTERVAL, self.timer_event) |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
170 |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
171 def font_timer_event(self): |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
172 newtextfont = self.text["font"] |
|
31947
765fe16f665b
1. Add an Options menu entry: Code Context
Kurt B. Kaiser <kbk@shore.net>
parents:
31937
diff
changeset
|
173 if self.label and newtextfont != self.textfont: |
|
31937
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
174 self.textfont = newtextfont |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
175 self.label["font"] = self.textfont |
|
ff5a31a71d9a
- New Extension: CodeContext. Provides block structuring hints for code
Kurt B. Kaiser <kbk@shore.net>
parents:
diff
changeset
|
176 self.text.after(FONTUPDATEINTERVAL, self.font_timer_event) |
