summaryrefslogtreecommitdiff
path: root/featuremap.tines
blob: 5e47754c2e3ec34fc5085f9ea460e231ac992ada (plain)
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
<?xml version="1.0" encoding="UTF-8"?>
<?hnb pos="0"?>
<!-- generated by tines 1.10.0 (https://github.com/larrykollar/tines) -->

<!DOCTYPE tree[
	<!ELEMENT tree (node*)>
	<!ELEMENT data (#PCDATA)> <!-- (max 4096 bytes long) -->
	<!ELEMENT node (data?,node*)>
	<!ATTLIST node done (yes|no) #IMPLIED
	          type CDATA #IMPLIED
	          expanded (yes|no) #IMPLIED
	>]>

<tree>
<node expanded="yes"><data>Configuration (OK)</data>
	<node type="todo" done="no"><data>OCaml settings</data>
		<node type="text"><data>Goal is not to reproduce OCaml testsuite, just that settings are applied correctly and that the few Merlin specific behavior are affected.</data></node>
		<node type="todo" done="no" expanded="yes"><data>include_dirs</data></node>
		<node type="todo" done="no" expanded="yes"><data>no_std_include</data>
			<node type="text"><data>check that it is possible to provide an alternative stdlib</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>unsafe</data>
			<node type="text"><data>check that merlin is subject to the same syntactic quirks as OCaml</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>classic</data>
			<node type="text"><data>write code that mixes different kind of arguments, check errors</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>principal</data>
			<node type="text"><data>write non-principal code, check errors</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>threads</data>
			<node type="text"><data>check that Thread/Mutex/Event libraries are found if the flag is specified</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>recursive_types</data>
			<node type="text" expanded="yes"><data>write dubious code that wouldn&apos;t typecheck without it</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>strict_sequence</data>
			<node type="text"><data>check that 5; () fails</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>applicative_functors</data>
			<node type="text"><data>check that non-applicative functors are rejected, check quirks in Parser</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>unsafe_string</data>
			<node type="todo" done="no"><data>check that environment is setup correctly with and without unsafe string</data></node>
			<node type="todo" done="no"><data>check that Bytes and String deprecation warning are reported appropriately</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>nopervasives</data>
			<node type="text" expanded="yes"><data>figure wtf happens in this case ?!</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>strict_formats</data>
			<node type="text"><data>check it conforms to OCaml behavior, what is this expected to do?</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>open_modules</data>
			<node type="text"><data>check environment is initialized as it should</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>ppx</data>
			<node type="todo" done="no"><data>check Ast is rewritten as it should</data></node>
			<node type="todo" done="no"><data>ensure graceful degradation if ppx is missing or broken</data></node>
			<node type="todo" done="no"><data>check composition of multiple ppx work as expected</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>pp</data>
			<node type="text"><data>check frontend/reader is affected as it should</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>warnings</data>
			<node type="todo" done="no"><data>check that a few warnings are treated properly</data></node>
		</node>
		<node type="todo" done="no"><data>reals_paths / Short-path</data></node>
	</node>
	<node type="todo" done="no"><data>Findlib configuration</data>
		<node type="todo" done="no" expanded="yes"><data>conf</data>
			<node type="text"><data>check that it overrides location of findlib.conf</data></node>
			<node type="text"><data>check behavior when file is missing or invalid (directory, wrong permission)</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>path</data>
			<node type="text"><data>check that it actually adds new path to the findlib package directories</data></node>
		</node>
	</node>
	<node type="todo" done="no"><data>Merlin settings</data>
		<node type="todo" done="no"><data>TODO: define command line flags for each of these settings</data></node>
		<node type="todo" done="no" expanded="yes"><data>build_path / source_path / cmi_path / cmt_path</data>
			<node type="text"><data>specify which behavior are affected by each path variable</data></node>
			<node type="text"><data>check that each variable is considered for corresponding lookups</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>extensions</data>
			<node type="text"><data>check that corresponding extensions are enabled in lexer / parser / typer</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>suffixes</data>
			<node type="text"><data>specify which behavior should be affected by suffixes</data></node>
			<node type="text"><data>check that .ml(i) and .re(i) are correctly handled by default</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>stdlib</data>
			<node type="text"><data>check that it is possible to use merlin with a different installation of OCaml</data></node>
			<node type="text"><data>ensure graceful degradation if stdlib is incorrect</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>reader</data>
			<node type="text"><data>ensure this setting is not ignored</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>dot_merlin</data>
			<node type="text" expanded="yes"><data>specify the format for good</data></node>
			<node type="text"><data>ensure all features are parsed and affects configuration</data></node>
			<node type="text"><data>ensure recursive resolution is working properly</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>packages</data>
			<node type="text"><data>ensure build path is updated correctly</data></node>
			<node type="text"><data>ensure graceful degradation when loading unknown or invalid packages</data></node>
			<node type="text" expanded="yes"><data>ensure that ppxs specified by packages are loaded correctly</data>
				<node><data>ppx path should be resolved relative to package directory</data></node>
			</node>
		</node>
	</node>
	<node type="todo" done="no"><data>Query settings</data>
		<node type="todo" done="no" expanded="yes"><data>directory</data>
			<node type="text"><data>ensure this setting takes precedence over process working directory</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>filename</data>
			<node type="text"><data>TODO: remove Msource.filename?</data></node>
		</node>
		<node type="todo" done="no" expanded="yes"><data>terminal_width</data>
			<node type="text"><data>check that pretty printer / error behavior take this into account :)</data></node>
			<node type="text"><data>or completely remove it?</data></node>
		</node>
		<node type="todo" done="no"><data>verbosity</data>
			<node type="text"><data>check that various verbosity sensitive queries are affected</data></node>
		</node>
	</node>
</node>
<node expanded="yes"><data>Queries (WIP)</data>
	<node type="todo" done="no"><data>Case analysis (destruct)</data></node>
	<node type="todo" done="no"><data>Completion</data>
		<node><data>Normal</data>
			<node><data>Candidate enumeration</data>
				<node><data>Polymorphic variants</data></node>
				<node><data>Values</data></node>
				<node><data>Value constructors</data></node>
				<node><data>Type constructors</data></node>
				<node><data>Modules</data>
					<node><data>Signature expansion affected by verbosity</data></node>
				</node>
				<node><data>Module types</data></node>
				<node><data>Record labels</data></node>
			</node>
		</node>
		<node><data>Record fields</data>
			<node><data>Normal</data></node>
			<node><data>After module path</data></node>
		</node>
		<node><data>Method completion</data></node>
		<node><data>Sorting</data>
			<node><data>By categories</data>
				<node><data>Expression</data></node>
				<node><data>Structure</data></node>
				<node><data>Pattern</data></node>
				<node><data>Module</data></node>
				<node><data>Module types</data></node>
				<node><data>Signature </data></node>
				<node><data>Type</data></node>
			</node>
			<node><data>By unification cost</data></node>
			<node><data>By number of &quot;arrows&quot;</data></node>
		</node>
		<node><data>Arguments</data>
			<node><data>Type-directed</data></node>
			<node><data>For infix operator</data></node>
			<node><data>Labelled argument</data></node>
			<node><data>Optional argument</data></node>
		</node>
		<node><data>Expansion / spell checking</data>
			<node><data>Path prefixes completion</data></node>
			<node><data>Spell correction</data></node>
		</node>
		<node><data>Global modules</data></node>
		<node><data>Filtering</data>
			<node><data>Hidden namespace &apos;_&apos;</data></node>
			<node><data>Janestreet modules containing &apos;__&apos;</data></node>
		</node>
	</node>
	<node type="todo" done="no"><data>Document</data>
		<node><data>check external doc comments are reported appropriately</data></node>
		<node><data>check internal doc comments are reported appropriately</data></node>
	</node>
	<node type="todo" done="no"><data>Dump</data>
		<node><data>parsetree</data></node>
		<node><data>printast</data></node>
		<node><data>env / fullenv</data></node>
		<node><data>browse</data></node>
		<node><data>tokens</data></node>
		<node><data>flags</data></node>
		<node><data>warnings</data></node>
		<node><data>exn</data></node>
		<node><data>paths</data></node>
	</node>
	<node type="todo" done="no"><data>Errors</data>
		<node><data>Sources</data>
			<node><data>Lexer</data></node>
			<node><data>Parser</data></node>
			<node><data>Typer</data>
				<node><data>If a CMI is missing, only report this error (FIXME: these errors?)</data></node>
				<node><data>Filter out type errors after a syntax error, they are likely to be noise</data></node>
				<node><data>Top-level errors shouldn&apos;t escape</data></node>
			</node>
		</node>
		<node><data>Sort by position</data></node>
		<node><data>TODO: find a way to measure recovery quality</data></node>
	</node>
	<node type="todo" done="no"><data>Extensions</data>
		<node><data>Meta OCaml</data></node>
		<node><data>Lwt</data></node>
	</node>
	<node type="todo" done="no"><data>Findlib list</data>
		<node><data>Check that custom findlib setups are supported</data></node>
		<node><data>Fail gracefully if findlib not available? (JST)</data></node>
	</node>
	<node type="todo" done="no"><data>Jump</data></node>
	<node type="todo" done="no"><data>Locate</data></node>
	<node type="todo" done="no"><data>Occurrences</data>
		<node><data>Look in the appropriate namespace, check correct behavior for each</data>
			<node><data>Values</data></node>
			<node><data>Constructors</data></node>
			<node><data>Types</data></node>
			<node><data>Modules</data></node>
		</node>
		<node><data>What is the behavior when exiting/entering a module</data>
			<node><data>Plain identifier when referred to from outside the module?</data></node>
			<node><data>Qualified identifier when referred to from inside the module</data></node>
		</node>
	</node>
	<node type="todo" done="no"><data>Outline</data></node>
	<node type="todo" done="no"><data>Shape</data></node>
	<node type="todo" done="no"><data>Type enclosing</data>
		<node><data>String argument (expro) is a bit redundant: only position should be provided.</data></node>
	</node>
	<node type="todo" done="no"><data>Type expression</data>
		<node><data>Ensure expression is typed in the right environment</data></node>
		<node><data>Explain how verbosity affects results</data></node>
	</node>
	<node type="todo" done="no"><data>Which (find source files)</data>
		<node><data>With ext</data></node>
		<node><data>Path</data></node>
	</node>
</node>
<node><data>Reader (WIP)</data>
	<node><data>check behaviors for builtin, -pp and external frontends</data></node>
	<node><data>Lexer</data>
		<node><data>Reconstruct identifiers</data></node>
		<node><data>Decompose path components into tokens (TODO)</data></node>
		<node><data>Check comments are reported appropriately</data></node>
	</node>
	<node><data>Parser</data>
		<node><data>check support for ML &amp; MLI</data></node>
	</node>
	<node><data>Pretty-printer</data>
		<node><data>of parsetree (for destruct)</data></node>
		<node><data>of outcometree (for completion &amp; error report)</data></node>
		<node><data>support for external readers</data></node>
	</node>
</node>
</tree>