1 | #!/usr/bin/env python2
|
2 | from __future__ import print_function
|
3 |
|
4 | from _devbuild.gen import arg_types
|
5 | from _devbuild.gen.syntax_asdl import loc
|
6 | from core import completion
|
7 | from core.error import e_usage
|
8 | from core import vm
|
9 | from data_lang import j8
|
10 | from mycpp import mops
|
11 | from mycpp import mylib
|
12 | from mycpp.mylib import log
|
13 | from frontend import flag_util
|
14 | from frontend import args
|
15 |
|
16 | from typing import TYPE_CHECKING
|
17 | if TYPE_CHECKING:
|
18 | from _devbuild.gen.runtime_asdl import cmd_value
|
19 |
|
20 |
|
21 | class CompExport(vm._Builtin):
|
22 |
|
23 | def __init__(self, root_comp):
|
24 | # type: (completion.RootCompleter) -> None
|
25 | self.root_comp = root_comp
|
26 |
|
27 | def Run(self, cmd_val):
|
28 | # type: (cmd_value.Argv) -> int
|
29 | arg_r = args.Reader(cmd_val.argv, cmd_val.arg_locs)
|
30 | arg_r.Next()
|
31 |
|
32 | attrs = flag_util.ParseMore('compexport', arg_r)
|
33 | arg = arg_types.compexport(attrs.attrs)
|
34 |
|
35 | if arg.c is None:
|
36 | e_usage('expected a -c string, like sh -c', loc.Missing)
|
37 |
|
38 | arg_begin = mops.BigTruncate(arg.begin)
|
39 | arg_end = mops.BigTruncate(arg.end)
|
40 |
|
41 | begin = 0 if arg_begin == -1 else arg_begin
|
42 | end = len(arg.c) if arg_end == -1 else arg_end
|
43 |
|
44 | #log('%r begin %d end %d', arg.c, begin, end)
|
45 |
|
46 | # Copied from completion.ReadlineCallback
|
47 | comp = completion.Api(line=arg.c, begin=begin, end=end)
|
48 | it = self.root_comp.Matches(comp)
|
49 |
|
50 | #print(comp)
|
51 | #print(self.root_comp)
|
52 |
|
53 | comp_matches = list(it)
|
54 | comp_matches.reverse()
|
55 |
|
56 | if arg.format == 'jlines':
|
57 | buf = mylib.BufWriter()
|
58 | for m in comp_matches:
|
59 | # Note: everything is quoted, that seems simpler.
|
60 | j8.EncodeString(m, buf)
|
61 | print(buf.getvalue())
|
62 | buf.clear()
|
63 |
|
64 | elif arg.format == 'tsv8':
|
65 | log('TSV8 format not implemented')
|
66 | else:
|
67 | raise AssertionError()
|
68 |
|
69 | return 0
|