Skip to content

Commit

Permalink
Merge ffc658b into dc61826
Browse files Browse the repository at this point in the history
  • Loading branch information
autophagy committed Feb 6, 2017
2 parents dc61826 + ffc658b commit 73da8cd
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 8 deletions.
35 changes: 27 additions & 8 deletions src/crate/crash/repl.py
Expand Up @@ -21,6 +21,7 @@
# software solely pursuant to the terms of the relevant commercial agreement.

import os
import re

from pygments.lexers.sql import SqlLexer
from pygments.style import Style
Expand Down Expand Up @@ -179,14 +180,32 @@ def __init__(self, cmd):
def __call__(self, buffer):
if not self.cmd.should_autocapitalize():
return
last_word = buffer.document.get_word_before_cursor(WORD=True)
if not last_word.isupper() and last_word.lower() in SQLCompleter.keywords:
buffer.delete_before_cursor(len(last_word))
buffer.insert_text(last_word.upper(), fire_event=False)
self.last_changed = last_word
elif self.last_changed and last_word.startswith(self.last_changed.upper()):
buffer.delete_before_cursor(len(last_word))
buffer.insert_text(self.last_changed + last_word[-1:], fire_event=False)

def keyword_replacer(match):
if match.group(0).lower() in SQLCompleter.keywords:
return match.group(0).upper()
else:
return match.group(0)

def is_prefix(a, b):
return a.startswith(b) and a != b

current_line = buffer.document.current_line
cursor_position = buffer.document.cursor_position

if self.last_changed and is_prefix(current_line.lower(), self.last_changed.lower()):
diff = len(self.last_changed) - len(current_line)
current_line = self.last_changed + current_line[diff:]

newLine = re.sub('(?:"\w+)|(?:\'\w+)|\w+', func, current_line)

if newLine != buffer.document.current_line:
buffer.delete_before_cursor(cursor_position)
buffer.delete(len(newLine) - cursor_position)
buffer.insert_text(newLine, fire_event=False)
self.last_changed = current_line




def loop(cmd, history_file):
Expand Down
16 changes: 16 additions & 0 deletions src/crate/crash/test_repl.py
Expand Up @@ -63,6 +63,22 @@ def test_capitalize(self):
self.capitalizer(buffer)
self.assertEqual(u'CREATE TABLE "select', buffer.text)

text = u'CREATE TABLE \'select\''
buffer.set_document(Document(text, len(text)))
self.capitalizer(buffer)
self.assertEqual(u'CREATE TABLE \'select\'', buffer.text)

text = u'create table test (x int)'
buffer.set_document(Document(text, len(text)))
self.capitalizer(buffer)
self.assertEqual(u'CREATE TABLE test (x INT)', buffer.text)

text = u'create table test (a boolean, b string, c integer)'
buffer.set_document(Document(text, len(text)))
self.capitalizer(buffer)
self.assertEqual(u' CREATE TABLE test (a BOOLEAN, b STRING, c INTEGER)', buffer.text)


def test_undo_capitalize(self):
buffer = Buffer()

Expand Down

0 comments on commit 73da8cd

Please sign in to comment.