Commit Graph

9492 Commits (12bc7f7de4bfd4265225ec0142b71d273ec7671f)
 

Author SHA1 Message Date
Michael Davis 0c494dd5fc
update tree-sitter-cli to v0.20.6 2022-03-17 18:53:16 +07:00
Charles Strahan daa46a370d
Merge pull request #26 from cstrahan/ci_sanity_check_parser
CI: sanity check parser
2022-03-17 18:48:54 +07:00
Charles Strahan e0b773e192 partially revert #18
This test case no longer passes with a fresh build of the parser.
Need to investigate.
2022-03-17 18:46:12 +07:00
Charles Strahan 84e2821a12 ci: fix change detection 2022-03-17 18:43:44 +07:00
Charles Strahan 45e3b298ca regenerate parser 2022-03-17 18:31:40 +07:00
Charles Strahan 282441835d ci: only check src dir 2022-03-17 18:30:17 +07:00
Charles Strahan ab7fc9254b ci: bump node to v16 2022-03-17 18:28:05 +07:00
Charles Strahan da77ef4ff0 ci: pin npm packages 2022-03-17 18:25:17 +07:00
Charles Strahan ed9a571f6e ci: sanity check generated parser
Make sure that we're using the same version of tree-sitter
to generate the parser, and that we're generating the parser
before we merge.
2022-03-17 18:16:43 +07:00
Charles Strahan 5b6f3943a7 remove bogus conflicts 2022-03-17 17:20:04 +07:00
Wilfred Hughes 2ce09e0a56 Move functions only used in context calculations to context.rs 2022-03-17 09:32:34 +07:00
Charles Strahan 12f7248855 add support for interpolation within paths
Fixes #25
2022-03-17 09:22:58 +07:00
Wilfred Hughes 6d58247465 Preserve the outer delimiter when shrinking
Previously, we'd always discard the outer delimiter if it matched on
both sides. This prevented the tree diff finding optimal diffs.

Fixes #124
2022-03-16 23:38:05 +07:00
Wilfred Hughes f4f12003cb Fix minor clippy lints 2022-03-16 22:42:31 +07:00
Charles Strahan 267da27715 fix ? ("hasAttr" syntax)
The old binary rule for ? was broken: it should
take an attrpath on the right, but it was coded
to accept an expression.

This introduces a new has_attr rule for this syntax.
2022-03-16 23:45:22 +07:00
Charles Strahan 871fb5267d fix comment regex
Fixes #23
2022-03-16 23:10:25 +07:00
Wilfred Hughes d709aa98b5 Fix typo 2022-03-15 21:52:09 +07:00
Wilfred Hughes 83eea58fbc Display cost when printing routes 2022-03-15 21:33:01 +07:00
Wilfred Hughes 02976415dc Remove unnecessary braces 2022-03-15 21:19:05 +07:00
Wilfred Hughes 40d3ccd06c Fix confusion between byte length and codepoint length in styling
We should split lines based on their codepoint length, so all our
lengths are on codepoint boundaries. We can then safely index by byte position.

All the positions are measured in bytes, not code points. Tweak
function names to make this explicit.

Fixes #149
2022-03-15 09:50:13 +07:00
Wilfred Hughes b2229d66a8 Always display all lines in a hunk
Previously we were assuming that the first/last line pairs in a hunk
contained the earliest/latest lines on both sides. This isn't true
when there are no common items between the lines.

This fixes some display issues in load_before/after.js, but include a
new integration test that is smaller and easier to eyeball.

Fixes #133
2022-03-15 00:11:30 +07:00
Wilfred Hughes 6d9dc8322f Tweak motto 2022-03-13 22:14:03 +07:00
Wilfred Hughes 8c469e3d36 Ensure slider correction sets the opposite node on both sides
Fixes #154
2022-03-13 21:23:58 +07:00
Wilfred Hughes 19d11951ce Update changelog for c0d1faae6 2022-03-13 20:26:59 +07:00
Wilfred Hughes 7e8bf37bbc Use NonZeroU32 for unique IDs
This is a modest memory saving (reducing instruction counts by 3%
too), and it's nice having a distinct type for IDs.
2022-03-13 18:41:39 +07:00
Wilfred Hughes 0eb9f82aed Include node ID when printing ChangeKind 2022-03-13 18:28:33 +07:00
Wilfred Hughes c0d1faae63 Keep exploring the graph even when we find matched delimiters
Previously we'd get tripped up by cases where choosing equal
delimiters would be be considered the same as entering each delimiter
separately, making diffs worse.

Fixes #147
2022-03-13 15:41:54 +07:00
Wilfred Hughes bd6a1cbdc6 Store can_pop_either in Vertex 2022-03-13 13:56:18 +07:00
Wilfred Hughes 85fc2c6340 cargo fmt 2022-03-13 13:16:40 +07:00
Wilfred Hughes d416ee289f Improve debug printing
Clarify that we're printing count, not node IDs.
2022-03-13 12:43:50 +07:00
Wilfred Hughes 615c18d63e Clarify cost choices more 2022-03-12 18:03:26 +07:00
Wilfred Hughes 20aa06db5f Remove obsolete comment 2022-03-12 18:01:08 +07:00
Wilfred Hughes fdf5c2f88e Improve bug report template wording
Closes #138
2022-03-12 17:44:54 +07:00
Wilfred Hughes 50a3eb958e
Update issue templates 2022-03-12 17:37:14 +07:00
Wilfred Hughes 9439a932e6 Optimise hunk search within matched_lines
This reduces instructions from 29B instructions to 22B for the sample
file in #153.
2022-03-12 14:40:49 +07:00
Wilfred Hughes dad463daf5 Use Myers' diff everywhere
The diff crate has a great ergonomic API, but it doesn't implement
Myers' algorithm and performs badly on large inputs.

https://github.com/utkarshkukreti/diff.rs/issues/1

Now that we have a wrapper wu_diff that provides a similar API,
replace the remaining call sites to diff::slice(). These are
relatively cold, so this is a small performance improvement (1%
instruction reduction).
2022-03-12 12:29:34 +07:00
Wilfred Hughes dbf088bd25 cargo fmt 2022-03-12 12:22:38 +07:00
Wilfred Hughes 6210921104 Use Myers' diff for word-level diffing too
This further improves performance on large text files. On the sample
files in #153, this improves performance from 99B instructions to 29B
instructions on my machine.
2022-03-12 12:19:57 +07:00
Wilfred Hughes 5d8af55231 Prefer myers_diff types 2022-03-12 12:17:26 +07:00
Wilfred Hughes edee567e61 Factor out a myers_diff module 2022-03-12 12:15:59 +07:00
Wilfred Hughes dba68d1d2a Don't run syntax highlighting when dumping the tree-sitter output
For large files, tree-sitter syntax highlighting is much more
expensive than the parse itself. We spend most of the runtime
advancing the tree-sitter query cursor.

This doesn't affect runtime of normal usage, but it helps debugging
and makes flamegraphs more readable.

Spotted in #153
2022-03-12 11:53:39 +07:00
Wilfred Hughes 2f8ccd94da Add sample file showing slow perf large adjacent lists
Part of #156.
2022-03-12 11:28:28 +07:00
Jonathan Arnett f8d709f772 Version 0.20.1 2022-03-11 14:39:58 +07:00
Jonathan Arnett c560cb63e9 Remove note about error case tests from README 2022-03-11 14:39:48 +07:00
Jonathan Arnett 45c5b3c57f Version 0.20.0 2022-03-11 14:25:54 +07:00
Michael Davis a89523b436 Generate parser 2022-03-11 19:16:32 +07:00
Michael Davis 11d78be28e
generalize bit string option node (#22)
* generalize bit string option node
* highlight bit-string options as function.builtin
2022-03-11 14:16:12 +07:00
Wilfred Hughes afb1b369f4 Switch to wu-diff for textual diffing
In #153 a user reported difftastic never terminated on a 140,000
file. This was due to the diff crate using a very large amount of time
and memory.

The diff crate does not use Myers' algorithm, which has a
divide-and-conquer approach using snakes:

https://blog.jcoglan.com/2017/03/22/myers-diff-in-linear-space-theory/

wu-diff does implement Myer's algorithm and performs much better on
these large files.
2022-03-10 23:12:25 +07:00
Wilfred Hughes e8d9ffa61c Remove unwanted debugging 2022-03-10 22:59:28 +07:00
Wilfred Hughes c81911be51 Allow the unchanged tree threshold to be changed with an env var
This is helpful when debugging production use cases. Fixes #155
2022-03-10 21:15:57 +07:00