Skip to content

Commit c44cc27

Browse files
author
Sebastian Ramacher
committed
Use string constants instead of magic numbers.
1 parent 243f0ba commit c44cc27

File tree

4 files changed

+30
-24
lines changed

4 files changed

+30
-24
lines changed

bpython/autocomplete.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@
3737
except (ImportError, AttributeError):
3838
has_abc = False
3939

40+
# Autocomplete modes
41+
SIMPLE = 'simple'
42+
SUBSTRING = 'substring'
43+
FUZZY = 'fuzzy'
44+
4045
class Autocomplete(rlcompleter.Completer):
4146
"""
4247
"""
@@ -47,7 +52,7 @@ def __init__(self, namespace = None, config = None):
4752
if hasattr(config, 'autocomplete_mode'):
4853
self.autocomplete_mode = config.autocomplete_mode
4954
else:
50-
self.autocomplete_mode = 1
55+
self.autocomplete_mode = SUBSTRING
5156

5257
def attr_matches(self, text):
5358
"""Taken from rlcompleter.py and bent to my will.
@@ -119,9 +124,9 @@ def global_matches(self, text):
119124
return matches
120125

121126
def method_match(self, word, size, text):
122-
if self.autocomplete_mode == 1:
127+
if self.autocomplete_mode == SIMPLE:
123128
return word[:size] == text
124-
elif self.autocomplete_mode == 2:
129+
elif self.autocomplete_mode == SUBSTRING:
125130
s = r'.*%s.*' % text
126131
return re.search(s, word)
127132
else:

bpython/cli.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282

8383
from bpython import repl
8484
from bpython.pager import page
85+
from bpython import autocomplete
8586
import bpython.args
8687

8788
py3 = sys.version_info[0] == 3
@@ -1432,15 +1433,15 @@ def tab(self, back=False):
14321433

14331434
# 3. check to see if we can expand the current word
14341435
cseq = None
1435-
if mode == 2:
1436+
if mode == autocomplete.SUBSTRING:
14361437
if all([len(match.split(cw)) == 2 for match in self.matches]):
14371438
seq = [cw + match.split(cw)[1] for match in self.matches]
14381439
cseq = os.path.commonprefix(seq)
14391440
else:
14401441
seq = self.matches
14411442
cseq = os.path.commonprefix(seq)
14421443

1443-
if cseq and mode != 3:
1444+
if cseq and mode != autocomplete.FUZZY:
14441445
expanded_string = cseq[len(cw):]
14451446
self.s += expanded_string
14461447
expanded = bool(expanded_string)
@@ -1472,7 +1473,7 @@ def tab(self, back=False):
14721473
self.list_win.border()
14731474
self.list_win.refresh()
14741475

1475-
if self.config.autocomplete_mode == 1:
1476+
if self.config.autocomplete_mode == autocomplete.SIMPLE:
14761477
self.s += current_match[len(cw):]
14771478
else:
14781479
self.s = self.s[:-len(cw)] + current_match

bpython/config.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from ConfigParser import ConfigParser
55
from itertools import chain
66
from bpython.keys import cli_key_dispatch as key_dispatch
7-
7+
from bpython.autocomplete import SUBSTRING
88

99
MAGIC_METHODS = ", ".join("__%s__" % s for s in [
1010
"init", "repr", "str", "lt", "le", "eq", "ne", "gt", "ge", "cmp", "hash",
@@ -56,7 +56,7 @@ def loadini(struct, configfile):
5656
'color_scheme': 'default',
5757
'complete_magic_methods' : True,
5858
'magic_methods' : MAGIC_METHODS,
59-
'autocomplete_mode':2,
59+
'autocomplete_mode': SUBSTRING,
6060
'dedent_after': 1,
6161
'flush_output': True,
6262
'highlight_show_source': True,
@@ -148,7 +148,7 @@ def loadini(struct, configfile):
148148
'complete_magic_methods')
149149
methods = config.get('general', 'magic_methods')
150150
struct.magic_methods = [meth.strip() for meth in methods.split(",")]
151-
struct.autocomplete_mode = config.getint('general', 'autocomplete_mode')
151+
struct.autocomplete_mode = config.get('general', 'autocomplete_mode')
152152

153153
struct.gtk_font = config.get('gtk', 'font')
154154

bpython/test/test_repl.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import sys
44
from itertools import islice
55
from mock import Mock
6-
from bpython import config, repl, cli
6+
from bpython import config, repl, cli, autocomplete
77

88
def setup_config(conf):
99
config_struct = config.Struct()
@@ -249,7 +249,7 @@ def test_push(self):
249249
# COMPLETE TESTS
250250
# 1. Global tests
251251
def test_simple_global_complete(self):
252-
self.repl = FakeRepl({'autocomplete_mode':1})
252+
self.repl = FakeRepl({'autocomplete_mode': autocomplete.SIMPLE})
253253
self.repl.input_line = "d"
254254
self.repl.current_word = "d"
255255

@@ -259,7 +259,7 @@ def test_simple_global_complete(self):
259259
['def', 'del', 'delattr(', 'dict(', 'dir(', 'divmod('])
260260

261261
def test_substring_global_complete(self):
262-
self.repl = FakeRepl({'autocomplete_mode':2})
262+
self.repl = FakeRepl({'autocomplete_mode': autocomplete.SUBSTRING})
263263
self.repl.input_line = "time"
264264
self.repl.current_word = "time"
265265

@@ -269,7 +269,7 @@ def test_substring_global_complete(self):
269269
['RuntimeError(', 'RuntimeWarning('])
270270

271271
def test_fuzzy_global_complete(self):
272-
self.repl = FakeRepl({'autocomplete_mode':3})
272+
self.repl = FakeRepl({'autocomplete_mode': autocomplete.FUZZY})
273273
self.repl.input_line = "doc"
274274
self.repl.current_word = "doc"
275275

@@ -280,7 +280,7 @@ def test_fuzzy_global_complete(self):
280280

281281
# 2. Attribute tests
282282
def test_simple_attribute_complete(self):
283-
self.repl = FakeRepl({'autocomplete_mode':1})
283+
self.repl = FakeRepl({'autocomplete_mode': autocomplete.SIMPLE})
284284
self.repl.input_line = "Foo.b"
285285
self.repl.current_word = "Foo.b"
286286

@@ -294,7 +294,7 @@ def test_simple_attribute_complete(self):
294294
['Foo.bar'])
295295

296296
def test_substring_attribute_complete(self):
297-
self.repl = FakeRepl({'autocomplete_mode':2})
297+
self.repl = FakeRepl({'autocomplete_mode': autocomplete.SUBSTRING})
298298
self.repl.input_line = "Foo.ar"
299299
self.repl.current_word = "Foo.ar"
300300

@@ -308,7 +308,7 @@ def test_substring_attribute_complete(self):
308308
['Foo.bar'])
309309

310310
def test_fuzzy_attribute_complete(self):
311-
self.repl = FakeRepl({'autocomplete_mode':3})
311+
self.repl = FakeRepl({'autocomplete_mode': autocomplete.FUZZY})
312312
self.repl.input_line = "Foo.br"
313313
self.repl.current_word = "Foo.br"
314314

@@ -323,7 +323,7 @@ def test_fuzzy_attribute_complete(self):
323323

324324
# 3. Edge Cases
325325
def test_updating_namespace_complete(self):
326-
self.repl = FakeRepl({'autocomplete_mode':1})
326+
self.repl = FakeRepl({'autocomplete_mode': autocomplete.SIMPLE})
327327
self.repl.input_line = "foo"
328328
self.repl.current_word = "foo"
329329
self.repl.push("foobar = 2")
@@ -334,7 +334,7 @@ def test_updating_namespace_complete(self):
334334
['foobar'])
335335

336336
def test_file_should_not_appear_in_complete(self):
337-
self.repl = FakeRepl({'autocomplete_mode':1})
337+
self.repl = FakeRepl({'autocomplete_mode': autocomplete.SIMPLE})
338338
self.repl.input_line = "_"
339339
self.repl.current_word = "_"
340340
self.assertTrue(self.repl.complete())
@@ -423,7 +423,7 @@ def setup_matches(tab=False):
423423
self.repl.config.tab_length = 4
424424
self.repl.config.auto_display_list = True
425425
self.repl.config.list_win_visible = True
426-
self.repl.config.autocomplete_mode = 1
426+
self.repl.config.autocomplete_mode = autocomplete.SIMPLE
427427

428428
# 3 Types of tab complete
429429
def test_simple_tab_complete(self):
@@ -433,15 +433,15 @@ def test_simple_tab_complete(self):
433433

434434
def test_substring_tab_complete(self):
435435
self.repl.s = "bar"
436-
self.repl.config.autocomplete_mode = 3
436+
self.repl.config.autocomplete_mode = autocomplete.FUZZY
437437
self.repl.tab()
438438
self.assertEqual(self.repl.s, "foobar")
439439
self.repl.tab()
440440
self.assertEqual(self.repl.s, "foofoobar")
441441

442442
def test_fuzzy_tab_complete(self):
443443
self.repl.s = "br"
444-
self.repl.config.autocomplete_mode = 3
444+
self.repl.config.autocomplete_mode = autocomplete.FUZZY
445445
self.repl.tab()
446446
self.assertEqual(self.repl.s, "foobar")
447447

@@ -482,15 +482,15 @@ def test_current_word(self):
482482
def test_fuzzy_attribute_tab_complete(self):
483483
"""Test fuzzy attribute with no text"""
484484
self.repl.s = "Foo."
485-
self.repl.config.autocomplete_mode = 3
485+
self.repl.config.autocomplete_mode = autocomplete.FUZZY
486486

487487
self.repl.tab()
488488
self.assertEqual(self.repl.s, "Foo.foobar")
489489

490490
def test_fuzzy_attribute_tab_complete2(self):
491491
"""Test fuzzy attribute with some text"""
492492
self.repl.s = "Foo.br"
493-
self.repl.config.autocomplete_mode = 3
493+
self.repl.config.autocomplete_mode = autocomplete.FUZZY
494494

495495
self.repl.tab()
496496
self.assertEqual(self.repl.s, "Foo.foobar")
@@ -502,7 +502,7 @@ def test_simple_expand(self):
502502
self.assertEqual(self.repl.s, "foo")
503503

504504
def test_substring_expand_forward(self):
505-
self.repl.config.autocomplete_mode = 2
505+
self.repl.config.autocomplete_mode = autocomplete.SUBSTRING
506506
self.repl.s = "ba"
507507
self.repl.tab()
508508
self.assertEqual(self.repl.s, "bar")

0 commit comments

Comments
 (0)