/
scanner_command_cd_command.py
51 lines (38 loc) · 1.17 KB
/
scanner_command_cd_command.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from .state import EOF
from .tokens import TokenEof
from .tokens_base import TOKEN_COMMAND_CD_COMMAND
from .tokens_base import TokenOfCommand
from Vintageous.ex import register_ex_command
@register_ex_command('cd', 'cd')
class TokenCdCommand(TokenOfCommand):
def __init__(self, params, *args, **kwargs):
super().__init__(params,
TOKEN_COMMAND_CD_COMMAND,
'cd', *args, **kwargs)
self.target_command = 'ex_cd'
@property
def path(self):
return self.params['path']
@property
def must_go_back(self):
return self.params['-']
def scan_command_cd_command(state):
params = {
'path': None,
'-': None,
}
bang = state.consume() == '!'
if not bang:
state.backup()
state.skip(' ')
state.ignore()
c = state.consume()
if c == '-':
params['-'] = '-'
state.expect(EOF)
raise NotImplementedError('parameter not implemented')
elif c != EOF:
state.backup()
m = state.match(r'(?P<path>.+?)\s*$')
params.update(m.groupdict())
return None, [TokenCdCommand(params, forced=bang), TokenEof()]