1
1
mirror of https://github.com/github/semantic.git synced 2025-01-08 08:30:27 +03:00
Commit Graph

752 Commits

Author SHA1 Message Date
Rob Rix
c839a434e8 🔥 distribute. 2016-05-19 13:43:02 -04:00
Rob Rix
bf656592c1 🔥 pairRangesWithLine. 2016-05-19 13:42:58 -04:00
Rob Rix
f4923c63b7 🔥 spanAndSplitFirstLines. 2016-05-19 13:42:53 -04:00
Rob Rix
73746013fb 🔥 alignChildrenInRanges. 2016-05-19 13:42:46 -04:00
Rob Rix
20627f764f Test alignBranch instead of alignChildrenInRanges. 2016-05-19 13:40:10 -04:00
Rob Rix
572082cacd Diff Keyed nodes using alignBranch. 2016-05-19 13:38:24 -04:00
Rob Rix
64ac903f3f Align branches within a copointed context. 2016-05-19 13:26:36 -04:00
Rob Rix
17d2e8fe62 Default the intersection assumption to True.
This fixes an issue where we dropped asymmetrical children on the
opposite side from earlier asymmetrical children when splitting up
deletions/insertions.
2016-05-19 12:39:43 -04:00
Rob Rix
4f13339838 🔥 some redundant bits of the comments. 2016-05-19 00:23:04 -04:00
Rob Rix
99d0496d72 Use first/second to advance asymmetrically before symmetrical children. 2016-05-18 17:22:02 -04:00
Rob Rix
78323c8183 Swap the order of the arguments to alignChildren. 2016-05-18 16:19:40 -04:00
Rob Rix
59ca7fd08b Fix a missing bracket in a comment.
This was making bracket-matcher sad.
2016-05-18 16:15:44 -04:00
Rob Rix
a92f55a053 alignChildren returns the remaining children in the nonintersecting case. 2016-05-18 16:06:15 -04:00
Rob Rix
bb38c87015 Reformat alignChildren’s cases. 2016-05-18 16:03:37 -04:00
Rob Rix
a5960a164f Factor the recursive call of alignChildren into its where clause. 2016-05-18 16:02:38 -04:00
Rob Rix
59ff6fcccd Handle an oxymoronic case to silence a warning (and in hope of future refactoring). 2016-05-18 15:57:32 -04:00
Rob Rix
6ce445068c Move the symmetrical child test up a level.
This avoids redundancy with the does-anything-intersect-on-both-sides
case.
2016-05-18 15:51:49 -04:00
Rob Rix
5e1d111cac Move the asymmetrical computation break into the where clause. 2016-05-18 15:44:04 -04:00
Rob Rix
43a893e843 lineAndRemainingWhere doesn’t imply any. 2016-05-18 15:37:28 -04:00
Rob Rix
4592bb89e9 Move the supporting everything-is-asymmetrical definitions to the relevant case. 2016-05-18 15:28:47 -04:00
Rob Rix
95262b5eba These aren’t documentation comments. 2016-05-18 14:55:31 -04:00
Rob Rix
39dfeab8e7 Take lines one at a time before asymmetrically-intersecting symmetrical children. 2016-05-18 13:00:39 -04:00
Rob Rix
1eac6d1302 We can simplify the symmetry test to isThese. 2016-05-18 09:55:52 -04:00
Rob Rix
feef0e46b9 intersects returns its result in the union of the shapes of ranges and line, not in the intersection of their shapes. 2016-05-17 16:41:01 -04:00
Rob Rix
249c417ba8 Only return lines when we have asymmetrical children on that side. 2016-05-17 16:39:15 -04:00
Rob Rix
e7e948e684 Add a wrapper for lineAndRemaining which takes a predicate. 2016-05-17 16:38:49 -04:00
Rob Rix
8c55ba57c6 The non-overlapping intersection case has the same shape as the ranges, not as the line. 2016-05-17 15:57:23 -04:00
Rob Rix
7cfdeff5e5 Intersections with empty children have the same shape as the ranges. 2016-05-17 15:04:09 -04:00
Rob Rix
b09abb7f10 Extract getRange to the top level. 2016-05-17 12:22:21 -04:00
Rob Rix
11bbde744a Fix a shadowing error.
So maybe I shouldn’t be so comfortable with shadowing after all.
2016-05-17 12:18:47 -04:00
Rob Rix
5f481de057 Rename symmetricalChildren (since only the first, if any, is guaranteed to be symmetrical). 2016-05-17 12:13:14 -04:00
Rob Rix
363a96c527 Note a case we want to handle correctly. 2016-05-17 12:11:46 -04:00
Rob Rix
ef9cf21d03 Only process asymmetrical intersecting children. 2016-05-17 12:08:22 -04:00
Rob Rix
8ef363713e Split the intersecting children into asymmetrical & symmetrical sublists. 2016-05-17 12:01:31 -04:00
Rob Rix
a380ae2147 Rename lines to children. 2016-05-16 14:46:23 -04:00
Rob Rix
e3d6cc9037 Drop empty children.
Fixes an issue where asymmetrical children were not being collected
into the top-level parent branch.
2016-05-16 13:26:09 -04:00
Rob Rix
2cbefee68b Don’t reprocess the nonintersecting split-off first lines. 2016-05-16 12:57:01 -04:00
Rob Rix
555fd7d124 Correct the inverted boolean. 2016-05-14 01:30:49 -04:00
Rob Rix
65827f17ac Correct the docs of why we pick left first. 2016-05-14 01:19:04 -04:00
Rob Rix
9cea134ee6 Call into alignBranch for Fixed nodes too. 2016-05-13 23:24:30 -04:00
Rob Rix
9b398ebd99 Avoid using head. 2016-05-13 18:17:01 -04:00
Rob Rix
c0a1d5b14b Only advance past lines we’ve actually taken. 2016-05-13 18:11:06 -04:00
Rob Rix
ebea3e1542 Align asymmetrically. 2016-05-13 18:07:41 -04:00
Rob Rix
97b8b7d4f8 lineAndRemaining takes its parameters in the opposite order. 2016-05-13 17:56:34 -04:00
Rob Rix
19870ee871 Add a function to produce a line and return the remaining lines. 2016-05-13 17:53:24 -04:00
Rob Rix
abd6221696 Pass headRanges to alignChildren instead of closing over it. 2016-05-13 17:42:17 -04:00
Rob Rix
de254b953f Split up lines in the asymmetrical cases in alignChildren. 2016-05-13 17:38:54 -04:00
Rob Rix
b19f6fe81a Split the first-line-to-Both-terms stuff into a function. 2016-05-13 17:34:28 -04:00
Rob Rix
0f2467e82a Handle the asymmetric cases disjointly. 2016-05-13 17:32:31 -04:00
Rob Rix
25831c5685 Test the intersections by side explicitly. 2016-05-13 17:31:21 -04:00
Rob Rix
312d9aec26 Use the existing definition of intersects. 2016-05-13 17:29:37 -04:00
Rob Rix
eecca41524 Correct the type of children. 2016-05-13 17:27:41 -04:00
Rob Rix
a624678778 alignChildren recurs in the symmetrical case. 2016-05-13 17:18:09 -04:00
Rob Rix
28c0672afd Use alignChildren to grab the first lines, then recur. 2016-05-13 17:16:11 -04:00
Rob Rix
f8b07fecae Stub in recursively selecting & splitting the first lines of children. 2016-05-13 17:15:45 -04:00
Rob Rix
d166581f37 Handle the degenerate case of intersects. 2016-05-13 16:52:42 -04:00
Rob Rix
8fecee4b83 We don’t use the nonintersecting children. 2016-05-13 16:52:10 -04:00
Rob Rix
2da3548b8b Stub in the asymmetrical/symmetrical alignment choice. 2016-05-13 16:51:50 -04:00
Rob Rix
d351fb5497 Handle the case where no children intersect on either side. 2016-05-13 16:46:53 -04:00
Rob Rix
3357dc5f82 Stub in an alignBranch function. 2016-05-13 16:40:46 -04:00
Rob Rix
df043b52b8 Stub in some type synonyms. 2016-05-13 16:40:38 -04:00
Rob Rix
8862fc35c1 Write down some properties we’d like to hold. 2016-05-13 16:40:18 -04:00
Rob Rix
b9673bb0ee Write down some overall behaviours we expect. 2016-05-13 16:40:10 -04:00
Rob Rix
7a4f2b98c8 Write down some notes about alignSyntax. 2016-05-13 16:39:48 -04:00
joshvera
48c7498ce2 Define Term in terms of Cofree 2016-05-04 14:37:24 -04:00
joshvera
9f8fc439b3 typealias Annotated to CofreeF 2016-05-03 14:19:10 -04:00
joshvera
6c07d4dc55 WIP CofreeF 2016-05-03 12:17:38 -04:00
Rob Rix
e70a50720c alignChildrenInRanges always exhausts its inputs, so call it instead. 2016-04-27 17:44:15 -04:00
Rob Rix
7413c72876 Count up in Both.
This is clunkier, but as @rachelmyers pointed out, it avoids the need
to reason on `increment` case-by-case.

For the same reason, it avoids the possibility of maintenance changing
`increment` in such a way that the selection of `first`/`second` falls
out of sync with the pattern being matched on; thus, it’s more
resilient to change.
2016-04-26 17:36:00 -04:00
Rob Rix
13d23e8d2d Parens, not $. 2016-04-26 16:31:39 -04:00
Rob Rix
25f25c3fcb Apply the increment function. 2016-04-26 16:31:33 -04:00
Rob Rix
808cf59fe5 Add a function to increment only the side we have a line on. 2016-04-26 16:30:57 -04:00
Rob Rix
85b1918224 Export applyThese/modifyJoin 😞 2016-04-25 14:42:38 -04:00
Rob Rix
1e94f493c9 Reincorporate nextLines into the computation of thisRanges. 2016-04-25 12:06:30 -04:00
Rob Rix
c8903aefe7 Inline the definition of put. 2016-04-25 12:00:33 -04:00
Rob Rix
df011fef9e Generalize distribute to arbitrary functors. 2016-04-25 11:38:35 -04:00
Rob Rix
36381cb432 Simplify the implementation of distribute. 2016-04-25 11:38:10 -04:00
Rob Rix
390302ae9d Document distribute. 2016-04-25 11:33:13 -04:00
Rob Rix
76f0b6fb0c Rename invertEmbedding to distribute. 2016-04-25 11:26:20 -04:00
Rob Rix
ccb7568d3e Align within a copointed functor to handle Keyed nodes. 2016-04-25 11:25:32 -04:00
Rob Rix
6b07bdf795 Add a function to invert the embedding of a copointed functor around Join These. 2016-04-25 11:19:51 -04:00
Rob Rix
d2dae5824d Expect children to be in a copointed context. 2016-04-22 12:18:40 -04:00
Rob Rix
f48a47ce8f Simplify prepending the tail. 2016-04-22 11:59:00 -04:00
Rob Rix
3fb4ad04fc uncons the first/next lines in the spanning pass. 2016-04-22 11:57:38 -04:00
Rob Rix
76f46ebb02 No need to re-cons the lines of nonintersecting children. 2016-04-22 11:48:08 -04:00
Rob Rix
3a130c9a66 Derive a Functor instance for Union. 2016-04-22 10:39:15 -04:00
Rob Rix
87f99998c9 split via a pattern guard. 2016-04-22 10:39:03 -04:00
Rob Rix
9b6f3f181c Revert "Align within an Alternative context."
This reverts commit d656d819158b3a31c874a8393757fde6f5deca6e.
2016-04-15 13:00:42 -04:00
Rob Rix
8949bc8a27 Align within an Alternative context. 2016-04-15 12:46:28 -04:00
Rob Rix
ffecacadab Rename catThese to unionThese. 2016-04-15 12:45:33 -04:00
Rob Rix
c54924f3ea Define catThese over Alternative Foldable functors. 2016-04-15 12:44:04 -04:00
Rob Rix
2974e5f42d Correct catThese. 2016-04-15 12:38:17 -04:00
Rob Rix
23f487ae35 Union wraps Join These. 2016-04-15 12:15:47 -04:00
Rob Rix
7c8354f862 Revert "Hide Alt."
This reverts commit a43afb89898b918c06834e92ade43113e74fd35f.
2016-04-15 11:57:26 -04:00
Rob Rix
7fa9fa1238 Hide Alt. 2016-04-15 11:28:43 -04:00
Rob Rix
e52f5c9b4c Simplfiy catThese slightly. 2016-04-15 11:06:11 -04:00
Rob Rix
d82931a5f5 Don’t map Keyed children into lists. 2016-04-15 10:01:50 -04:00
Rob Rix
e316da1b88 Abstract the Alignment machinery over a Foldable instance. 2016-04-15 10:00:42 -04:00
Rob Rix
5ec7f6cc77 This case no longer arises. 2016-04-15 10:00:21 -04:00
Rob Rix
169dbea2a5 Use the local this/that bindings. 2016-04-15 09:37:01 -04:00
Rob Rix
ff54948c7b 📝 intersects. 2016-04-15 09:35:41 -04:00
Rob Rix
012425b11a Move intersectsRange to Range. 2016-04-15 09:34:34 -04:00
Rob Rix
e0f6c2ae2d splitThese returns its results in Maybe.
The uses of fromJust are as bad as the use of head, unfortunately.
2016-04-15 09:33:30 -04:00
Rob Rix
88d6fc08d4 Rename split → splitThese. 2016-04-15 09:31:43 -04:00
Rob Rix
940ad0ac82 📝 split. 2016-04-15 09:31:28 -04:00
Rob Rix
c585ca95d6 📝 modifyJoin. 2016-04-15 09:30:20 -04:00
Rob Rix
5e5e9fe7c8 🔥 the separate apThese function. 2016-04-15 09:29:23 -04:00
Rob Rix
8b3833b7ff 📝 Union. 2016-04-15 09:27:41 -04:00
Rob Rix
7ceaea76c8 Group the instances at the bottom. 2016-04-15 09:26:16 -04:00
Rob Rix
056b9647e8 🔥 Row. 2016-04-15 09:25:27 -04:00
Rob Rix
d7ed0bc74d Move the Union newtype up. 2016-04-15 09:23:41 -04:00
Rob Rix
ac26367e2d Rephrase the advance function in terms of catThese. 2016-04-14 22:23:26 -04:00
Rob Rix
a61d847705 Replace Data.Bifunctor.These and Data.Align with the these package. 2016-04-14 22:00:00 -04:00
Rob Rix
84abff8773 Move the extras atop These into Alignment. 2016-04-14 21:47:18 -04:00
Rob Rix
6662deac2b 🔥 the old split… code paths. 2016-04-14 21:16:10 -04:00
Rob Rix
3235cfee3a Define renderers in terms of alignDiff. 2016-04-14 21:16:02 -04:00
Rob Rix
7c63e92ea7 Construct SplitPatches. 2016-04-14 20:27:24 -04:00
Rob Rix
3e1072f714 Use record syntax to update info. 2016-04-14 19:40:49 -04:00
Rob Rix
0142a54dcf Move the getRange function to SplitDiff. 2016-04-14 18:36:09 -04:00
Rob Rix
c955c94729 Move alignDiff up. 2016-04-14 17:03:53 -04:00
Rob Rix
ad4d1ab9e4 Pair with the ranges appropriate for the intersecting elements.
This is gross.
2016-04-14 16:34:49 -04:00
Rob Rix
8052414634 Parens I guess. 2016-04-14 13:31:07 -04:00
Rob Rix
919fab9053 Reformat alignChildrenInRanges for less indentation. 2016-04-14 13:19:18 -04:00
Rob Rix
23cca50048 Rename group2 to alignChildrenInRanges. 2016-04-14 13:18:19 -04:00
Rob Rix
ce33d56086 🔥 a redundant blank line. 2016-04-14 13:15:27 -04:00
Rob Rix
e3ace6408c Merge branch 'master' into cofree-and-bifunctors-sitting-in-a-tree-a-l-i-g-n-edly
# Conflicts:
#	test/AlignmentSpec.hs
#	test/PatchOutputSpec.hs
2016-04-14 12:57:45 -04:00
Rob Rix
8c9a9c7586 🔥 mask. 2016-04-14 12:46:25 -04:00
Rob Rix
1656f93f65 🔥 spanThese. 2016-04-14 12:46:05 -04:00
Rob Rix
8a781d0edf 🔥 unconsThese. 2016-04-14 12:16:45 -04:00
Rob Rix
5a80999a1f Rearrange/rename the bindings a little. 2016-04-14 12:13:41 -04:00
Rob Rix
e5a3683c72 Implement applyThese in terms of apThese. 2016-04-14 12:08:37 -04:00
Rob Rix
17728c5f6d Implement catThese in terms of Union. 2016-04-14 12:05:52 -04:00
Rob Rix
ec4ff0cf14 Use catThese to merge lines. 2016-04-14 11:54:58 -04:00
Rob Rix
df898f3489 Rename mergeThese to catThese. 2016-04-14 11:54:50 -04:00
Rob Rix
282a993651 Add a mergeThese function to concatenate [Join These a] into Join These [a]. 2016-04-14 09:59:46 -04:00
Rob Rix
fcaa498033 Use sequenceL to invert the embedding of Join These (Maybe a) to Maybe (Join These a) 2016-04-14 09:50:44 -04:00
Rob Rix
345ac1b38a Use maybeThese to avoid the need for unconsThese. 2016-04-14 09:40:49 -04:00
Rob Rix
0867ae807f Implement group2 in terms of spanAndSplitLines. 2016-04-13 16:06:11 -04:00
Rob Rix
2ac2f6e5c9 Handle the empty case. 2016-04-13 16:05:56 -04:00
Rob Rix
0ea6286197 Split the body of spanAndSplitFirstLines onto a newline and dedent. 2016-04-13 16:05:48 -04:00
Rob Rix
b8bc77bb7f Return the heads/tails of children paired. 2016-04-13 11:47:35 -04:00
Rob Rix
747bfbf454 Return a list of nonintersecting children too. 2016-04-13 11:41:49 -04:00
Rob Rix
de05043c67 Span and split the intersecting first lines. 2016-04-13 11:08:01 -04:00
Rob Rix
7d11abd92a Split things up over several lines. 2016-04-12 17:58:54 -04:00
Rob Rix
dbe65d6831 Update the info with record syntax. 2016-04-12 17:56:52 -04:00
Rob Rix
0f8b6cea8d Preserve branch term sizes through splitting. 2016-04-12 10:48:30 -04:00
Rob Rix
852fa1f207 Preserve term sizes through splitting. 2016-04-12 10:42:44 -04:00
Rob Rix
71e8454fb4 Add a size field to Info. 2016-04-11 15:02:58 -04:00
Rob Rix
2f241803af Revert "Rewrite group2 in terms of spanIntersecting."
This reverts commit 3f808c548a6980b2ae35ec2fb7ea1dd249707668.
2016-04-11 12:06:02 -04:00
Rob Rix
48264b1cb3 Revert "Don’t bind tailRanges."
This reverts commit dcacd86ccb12fa11b603e0e7468614551104742e.
2016-04-11 12:04:34 -04:00
Rob Rix
fe7301ba3a Revert "Bind lists of intersecting & nonintersecting children."
This reverts commit 2453b500adc0774ab5311ca1eca946806b2bb9c9.
2016-04-11 12:04:19 -04:00
Rob Rix
87b699c09a Bind lists of intersecting & nonintersecting children. 2016-04-08 16:44:09 -04:00
Rob Rix
ec8fc5e7e7 Advance both sides if there are no unfinished children. 2016-04-08 15:22:09 -04:00
Rob Rix
efe7d43a59 Don’t bind tailRanges. 2016-04-08 15:06:00 -04:00
Rob Rix
20797a35c8 Use pairRangesWithLine to avoid unpacking Maybe. 2016-04-08 15:04:26 -04:00
Rob Rix
8c9a8906da Rewrite group2 in terms of spanIntersecting. 2016-04-08 15:00:17 -04:00
Rob Rix
338bfff7c3 spanMergeable returns left/right separately. 2016-04-08 14:53:52 -04:00
Rob Rix
65157c54f2 Document spanThese. 2016-04-08 12:06:19 -04:00
Rob Rix
dcd9431987 Add a spanThese function. 2016-04-08 12:04:01 -04:00
Rob Rix
eae8cf480b Coalesce the patterns. 2016-04-04 18:06:54 -04:00
Rob Rix
23a2e300ae intersects takes a single line. 2016-04-04 18:05:46 -04:00
Rob Rix
20c7578807 Consume all of the lines in group2. 2016-04-04 17:56:53 -04:00
Rob Rix
06dd79dc76 Align patches. 2016-04-04 17:26:40 -04:00
Rob Rix
0132f180ed 🔥 an extra commented-out line. 2016-04-04 17:20:54 -04:00
Rob Rix
84fc0a54a9 Implement alignPatch over Delete/Insert. 2016-04-04 17:20:21 -04:00
Rob Rix
881d902d3c Abstract alignSyntax over an Applicative instance.
This involves the use of a function which maps that functor into `Join
These`.
2016-04-04 17:18:29 -04:00
Rob Rix
c9fb18f128 🔥 the commented-out alignTerm. 2016-04-04 16:43:57 -04:00
Rob Rix
d2beafdc84 🔥 Both.unzip. 2016-04-04 16:25:16 -04:00
Rob Rix
df4247d0c9 alignSyntax takes the infos and syntax unpacked. 2016-04-04 15:54:38 -04:00
Rob Rix
013bf6e1c0 Extract alignSyntax to the top level. 2016-04-04 15:49:22 -04:00
Rob Rix
5ffd45ebe5 🔥 the old commented-out alignSyntax. 2016-04-04 15:47:43 -04:00
Rob Rix
f7c4c91cfe Align Fixed nodes. 2016-04-04 15:22:14 -04:00
Rob Rix
6856151fe5 Extract a wrapInBranch function to construct branches. 2016-04-04 15:21:57 -04:00
Rob Rix
9476b1226d 🔥 the huge comment block. 2016-04-04 13:35:04 -04:00
Rob Rix
261cb17a9a 🔥 advanceLeft/advanceRight. 2016-04-04 13:34:43 -04:00
Rob Rix
cd1601efbe Always advance on the intersecting side. 2016-04-04 13:34:21 -04:00
Rob Rix
16b08e3327 Advance along the sides that the child actually occupied. 2016-04-04 13:27:38 -04:00
Rob Rix
1f367274e7 advanceLeft/advanceRight are simple bifunctorial functions. 2016-04-04 13:21:05 -04:00
Rob Rix
522fd02b59 Rename first to firstLine. 2016-04-04 13:19:58 -04:00
Rob Rix
3d4f9a83f0 Use mask to select only the sides that the original child had. 2016-04-04 12:44:05 -04:00
Rob Rix
bb38e3dfa6 Add yet another gross function, this time to mask These with another These.
This is a bit like some bimap version of <$.
2016-04-04 12:43:32 -04:00
Rob Rix
8971b40e77 Take both sides when merging. 2016-04-04 12:43:11 -04:00
Rob Rix
7e23ffd86f Concatenate the unused side after splitting.
I suspect this will behave identically, but it is slightly more
accurate to our intention.
2016-04-01 16:04:55 -04:00
Rob Rix
1b1e88b4fd Define pairRangesWithLine over a Monoid instance to be total. 2016-04-01 10:56:44 -04:00
Rob Rix
8104f174ab Extract pairRangesWithLine to the top level. 2016-04-01 10:55:25 -04:00
Rob Rix
410a3044f9 Extract advanceLeft/advanceRight to top level. 2016-04-01 10:40:39 -04:00
Rob Rix
a582931a52 fmap outside of pairRangesWithLine. 2016-03-31 18:15:04 -04:00
Rob Rix
24ad721189 Rename atLeft/Right to advanceLeft/Right. 2016-03-31 18:08:02 -04:00
Rob Rix
3c11287729 🔥 maybeThese. 2016-03-31 18:00:03 -04:00
Rob Rix
6b00768ddf 🔥 spanMergeable. 2016-03-31 17:59:50 -04:00
Rob Rix
20ba0e37fd Rename pairRangeWithLine to pairRangesWithLine. 2016-03-31 17:44:10 -04:00
Rob Rix
2bc86aec0b Fix some misindentation. 2016-03-31 17:43:06 -04:00
Rob Rix
4878ed27df Split up children when merging asymmetrically. 2016-03-31 17:15:34 -04:00
Rob Rix
a56219d4d8 Lazily bind the splitting of the first line of the child. 2016-03-31 17:13:22 -04:00
Rob Rix
507595eed5 Only recur via the separate pattern. 2016-03-31 17:11:01 -04:00
Rob Rix
daca37bc24 Recur via a separate pattern.
This reverts commit 985ad3d43055c0773e85623db4a29fda8656ddbb.
2016-03-31 17:10:25 -04:00
Rob Rix
7442a180d6 group2 advances through the list of children. 2016-03-31 16:07:11 -04:00
Rob Rix
f1dea045e0 Rename the restOfChild binding to remainingLines. 2016-03-31 15:58:17 -04:00
Rob Rix
293d27d123 🔥 redundant parens. 2016-03-31 15:38:38 -04:00
Rob Rix
dea54b6790 Rename x to pairRangeWithLine. 2016-03-31 15:38:27 -04:00