OLD | NEW |
| (Empty) |
1 // Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE.md file. | |
4 | |
5 library fletchc.verbs.verbs; | |
6 | |
7 import 'infrastructure.dart' show | |
8 AnalyzedSentence, | |
9 Future, | |
10 TargetKind, | |
11 VerbContext; | |
12 | |
13 import 'attach_verb.dart' show | |
14 attachAction; | |
15 | |
16 import 'compile_verb.dart' show | |
17 compileAction; | |
18 | |
19 import 'create_verb.dart' show | |
20 createAction; | |
21 | |
22 import 'debug_verb.dart' show | |
23 debugAction; | |
24 | |
25 import 'export_verb.dart' show | |
26 exportAction; | |
27 | |
28 import 'help_verb.dart' show | |
29 helpAction; | |
30 | |
31 import 'run_verb.dart' show | |
32 runAction; | |
33 | |
34 import 'x_end_verb.dart' show | |
35 endAction; | |
36 | |
37 import 'x_servicec_verb.dart' show | |
38 servicecAction; | |
39 | |
40 import 'x_upgrade_verb.dart' show | |
41 upgradeAction; | |
42 | |
43 import 'x_download_tools_verb.dart' show | |
44 downloadToolsAction; | |
45 | |
46 import 'quit_verb.dart' show | |
47 quitAction; | |
48 | |
49 import 'show_verb.dart' show | |
50 showAction; | |
51 | |
52 typedef Future<int> DoAction(AnalyzedSentence sentence, VerbContext context); | |
53 | |
54 class Action { | |
55 final DoAction perform; | |
56 | |
57 final String documentation; | |
58 | |
59 /// True if this verb needs "in session NAME". | |
60 final bool requiresSession; | |
61 | |
62 /// True if this verb needs "to file NAME". | |
63 // TODO(ahe): Should be "to uri NAME". | |
64 final bool requiresToUri; | |
65 | |
66 /// True if this verb requires a session target (that is, "session NAME" | |
67 /// without "in"). | |
68 final bool requiresTargetSession; | |
69 | |
70 /// True if this verb allows trailing arguments. | |
71 final bool allowsTrailing; | |
72 | |
73 /// Optional kind of target required by this verb. | |
74 final TargetKind requiredTarget; | |
75 | |
76 /// Indicates whether the action needs a target. If [requiredTarget] is | |
77 /// non-null, this flag is set to `true`, regardless of the value given | |
78 /// in the constructor. | |
79 final bool requiresTarget; | |
80 | |
81 /// Optional list of targets supported (but not required) by this verb. | |
82 final List<TargetKind> supportedTargets; | |
83 | |
84 /// True if this verb supports "with <URI>" | |
85 final bool supportsWithUri; | |
86 | |
87 const Action( | |
88 this.perform, | |
89 this.documentation, | |
90 {this.requiresSession: false, | |
91 this.requiresToUri: false, | |
92 this.allowsTrailing: false, | |
93 bool requiresTargetSession: false, | |
94 TargetKind requiredTarget, | |
95 bool requiresTarget: false, | |
96 this.supportedTargets, | |
97 this.supportsWithUri: false}) | |
98 : this.requiresTargetSession = requiresTargetSession, | |
99 this.requiredTarget = | |
100 requiresTargetSession ? TargetKind.SESSION : requiredTarget, | |
101 requiresTarget = !identical(requiredTarget, null) || | |
102 requiresTarget || | |
103 requiresTargetSession; | |
104 } | |
105 | |
106 | |
107 // TODO(ahe): Support short and long documentation. | |
108 | |
109 /// Common actions are displayed in the default help screen. | |
110 /// | |
111 /// Please make sure their combined documentation fit in in 80 columns by 20 | |
112 /// lines. The default terminal size is normally 80x24. Two lines are used | |
113 /// for the prompts before and after running fletch. Another two lines may be | |
114 /// used to print an error message. | |
115 const Map<String, Action> commonActions = const <String, Action>{ | |
116 "help": helpAction, | |
117 "run": runAction, | |
118 "show": showAction, | |
119 "quit": quitAction, | |
120 }; | |
121 | |
122 /// Uncommon verbs aren't displayed in the normal help screen. | |
123 /// | |
124 /// These verbs are displayed when running `fletch help all`. | |
125 const Map<String, Action> uncommonActions = const <String, Action>{ | |
126 "attach": attachAction, | |
127 "compile": compileAction, | |
128 "create": createAction, | |
129 "debug": debugAction, | |
130 "export": exportAction, | |
131 "x-download-tools": downloadToolsAction, | |
132 "x-end": endAction, | |
133 "x-servicec": servicecAction, | |
134 "x-upgrade": upgradeAction, | |
135 }; | |
OLD | NEW |