def on_done(self, cmd_line): if ViColonInput.interactive_call: update_command_line_history('cmdline', cmd_line) try: # Use new parser for some commands. parsed_new = parse_command_line(cmd_line[1:]) if not parsed_new.command: parsed_new.command = TokenCommandGoto() self.window.run_command(parsed_new.command.target_command, {'command_line': cmd_line[1:]}) return except VimError as ve: # only new code emits VimErrors, so handle it. show_error(ve) return except Exception as e: message = str(e) + ' ' + "(%s)" % cmd_line show_not_implemented(message) return
def test_CanParseLongSequence(self): # Vim allows this. parsed = parse_command_line('1,2,3,4') self.assertEqual(parsed.line_range.start, [TokenDigits('3')]) self.assertEqual(parsed.line_range.end, [TokenDigits('4')])
def test_CanParseNumberRightHandSide(self): parsed = parse_command_line(',10') self.assertEqual(parsed.line_range.start, []) self.assertEqual(parsed.line_range.end, [TokenDigits('10')])
def test_CanParseNumber(self): parsed = parse_command_line('10') self.assertEqual(parsed.line_range.start, [TokenDigits('10')])
def test_CanParseSemicolonOffset(self): parsed = parse_command_line('+10;+10') self.assertEqual(parsed.line_range.start, [TokenOffset([10])]) self.assertEqual(parsed.line_range.end, [TokenOffset([10])]) self.assertEqual(parsed.line_range.separator, TokenSemicolon())
def test_CanParseOffsetCommaOffset(self): parsed = parse_command_line('+10,+10') self.assertEqual(parsed.line_range.separator, TokenComma()) self.assertEqual(parsed.line_range.start, [TokenOffset([10])]) self.assertEqual(parsed.line_range.end, [TokenOffset([10])])
def test_CanParseSemicolonOffset(self): parsed = parse_command_line(';+10') self.assertEqual(parsed.line_range.separator, TokenComma()) self.assertEqual(parsed.line_range.start, []) self.assertEqual(parsed.line_range.end, []) self.assertEqual(parsed.line_range.end_offset, [10])
def test_CanParseSearchBacwardWithOffset(self): parsed = parse_command_line('?foo?+10') self.assertEqual(parsed.line_range.start, [TokenSearchBackward('foo'), TokenOffset([10])]) self.assertEqual(parsed.line_range.end, [])
def test_CanParseSmicolonDot(self): parsed = parse_command_line(';.') self.assertEqual(parsed.line_range.start, []) self.assertEqual(parsed.line_range.end, [TokenDot()]) self.assertEqual(parsed.line_range.separator, TokenSemicolon())
def test_CanParseLoneSmicolon(self): parsed = parse_command_line(';') self.assertEqual(parsed.line_range.separator, TokenSemicolon())
def test_CanParseCommaDot(self): parsed = parse_command_line(',.') self.assertEqual(parsed.line_range.separator, TokenComma()) self.assertEqual(parsed.line_range.start, []) self.assertEqual(parsed.line_range.end, [TokenDot()])
def test_CanParseLoneComma(self): parsed = parse_command_line(',') self.assertEqual(parsed.line_range.separator, TokenComma())
def test_CanParseDollarWithCompany(self): parsed = parse_command_line('0,$') self.assertEqual(parsed.line_range.start, [TokenDigits('0')]) self.assertEqual(parsed.line_range.end, [TokenDollar()])
def test_CanParseDollarOnItsOwn(self): parsed = parse_command_line('$') self.assertEqual(parsed.line_range.start, [TokenDollar()])
def test_CanParseItOnItsOwn(self): parsed = parse_command_line('substitute') self.assertEqual(parsed.command.content, 'substitute')
def test_CanParseAlias(self): parsed = parse_command_line('s') self.assertEqual(parsed.command.content, 'substitute')
def test_CanParseEmpty(self): parsed = parse_command_line('') self.assertEqual(parsed.line_range, None) self.assertEqual(parsed.command, None)