From 9d145715812d63390bee3f1025f0359e7f4c3614 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Mon, 9 Mar 2015 18:09:59 +0100 Subject: Move hint message generation to a new function --- monkey/monkey.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'monkey/monkey.py') diff --git a/monkey/monkey.py b/monkey/monkey.py index 7c8141c..b6032f7 100755 --- a/monkey/monkey.py +++ b/monkey/monkey.py @@ -260,3 +260,44 @@ def fix(name, code, edits, aux_code='', timeout=30, debug=False): total_time = time.monotonic() - start_time return '', [], total_time, n_tested + +# Return a list of pairs (range, message) describing edits in [path]. +def fix_hints(code, path): + program = list(annotate(code)) + + messages = [] + for step_type, idx, a, b in path: + if step_type == 'add_rule': + msg = 'Add another rule.' + start = program[idx].pos + end = start + elif step_type == 'add_part': + msg = 'Add another goal.' + start = program[idx].pos + end = start + elif step_type == 'remove_part': + msg = 'Check this goal.' + start = program[idx].pos + end = idx + len(a) - 1 + if program[end].type in ('COMMA', 'PERIOD', 'SEMI'): + end -= 1 + end = program[end].pos + len(program[end].val) + elif step_type == 'change_part': + msg = 'Check this goal.' + first = 0 + while idx+first < len(program)-1 and first < len(a) and first < len(b) and a[first] == b[first]: + first += 1 + last = len(a)-1 + while last < len(b) and last >= first and a[last] == b[last]: + last -= 1 + start = program[idx+first].pos + end = program[idx+last].pos + len(program[idx+last].val) + elif step_type == 'remove_rule': + msg = 'Check this rule.' + start = program[idx].pos + end = program[idx + len(a) - 1].pos + messages.append(((start, end), msg)) + + program[idx:idx+len(a)] = [t.clone(pos=program[idx].pos) for t in b] + + return messages -- cgit v1.2.1