From 754b06d17e5e1fe9c1b8e4a15da1421e784112ea Mon Sep 17 00:00:00 2001 From: Michael Selik Date: Sat, 1 Apr 2017 00:55:59 -0400 Subject: [PATCH 1/3] change LBYL key lookup to dict.setdefault The ``results`` was constructed as a defaultdict and we could simply delete the check ``if key not in results``. However, I think it's safer to use dict.setdefault as I'm not sure whether the caller expects a regular dict or defaultdict. --- Lib/lib2to3/btm_matcher.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/Lib/lib2to3/btm_matcher.py b/Lib/lib2to3/btm_matcher.py index eabe1a71a654acb..e718b5c4f026ce5 100644 --- a/Lib/lib2to3/btm_matcher.py +++ b/Lib/lib2to3/btm_matcher.py @@ -9,7 +9,6 @@ import logging import itertools -from collections import defaultdict from . import pytree from .btm_utils import reduce_tree @@ -97,7 +96,7 @@ def run(self, leaves): A dictionary of node matches with fixers as the keys """ current_ac_node = self.root - results = defaultdict(list) + results = {} for leaf in leaves: current_ast_node = leaf while current_ast_node: @@ -117,10 +116,7 @@ def run(self, leaves): #token matches current_ac_node = current_ac_node.transition_table[node_token] for fixer in current_ac_node.fixers: - if not fixer in results: - results[fixer] = [] - results[fixer].append(current_ast_node) - + results.setdefault(fixer, []).append(current_ast_node) else: #matching failed, reset automaton current_ac_node = self.root @@ -134,9 +130,7 @@ def run(self, leaves): #token matches current_ac_node = current_ac_node.transition_table[node_token] for fixer in current_ac_node.fixers: - if not fixer in results.keys(): - results[fixer] = [] - results[fixer].append(current_ast_node) + results.setdefault(fixer, []).append(current_ast_node) current_ast_node = current_ast_node.parent return results From fe504af756b18815b82a66e78b55b904a376a595 Mon Sep 17 00:00:00 2001 From: Michael Selik Date: Sat, 1 Apr 2017 01:17:47 -0400 Subject: [PATCH 2/3] add name to the acknowledgements file --- Misc/ACKS | 1 + 1 file changed, 1 insertion(+) diff --git a/Misc/ACKS b/Misc/ACKS index 21642065f43810a..379ffc554ad92bc 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1376,6 +1376,7 @@ Steven Scott Nick Seidenman Michael Seifert Žiga Seilnacht +Michael Selik Yury Selivanov Fred Sells Jiwon Seo From 39c253a8acd73e4ffdaf9e7c86c4f9b6e4c3d675 Mon Sep 17 00:00:00 2001 From: Michael Selik Date: Sat, 1 Apr 2017 12:33:32 -0400 Subject: [PATCH 3/3] use defaultdict to make the key-lookup cleaner --- Lib/lib2to3/btm_matcher.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Lib/lib2to3/btm_matcher.py b/Lib/lib2to3/btm_matcher.py index e718b5c4f026ce5..3b78868038bda07 100644 --- a/Lib/lib2to3/btm_matcher.py +++ b/Lib/lib2to3/btm_matcher.py @@ -9,6 +9,7 @@ import logging import itertools +from collections import defaultdict from . import pytree from .btm_utils import reduce_tree @@ -96,7 +97,7 @@ def run(self, leaves): A dictionary of node matches with fixers as the keys """ current_ac_node = self.root - results = {} + results = defaultdict(list) for leaf in leaves: current_ast_node = leaf while current_ast_node: @@ -116,7 +117,7 @@ def run(self, leaves): #token matches current_ac_node = current_ac_node.transition_table[node_token] for fixer in current_ac_node.fixers: - results.setdefault(fixer, []).append(current_ast_node) + results[fixer].append(current_ast_node) else: #matching failed, reset automaton current_ac_node = self.root @@ -130,7 +131,7 @@ def run(self, leaves): #token matches current_ac_node = current_ac_node.transition_table[node_token] for fixer in current_ac_node.fixers: - results.setdefault(fixer, []).append(current_ast_node) + results[fixer].append(current_ast_node) current_ast_node = current_ast_node.parent return results