3 releases (breaking)

0.3.0 Oct 25, 2023
0.2.1 Feb 6, 2023
0.2.0 Feb 6, 2023
0.1.0 Sep 2, 2022

#1259 in Parser implementations

GPL-3.0 license

64KB
1.5K SLoC

tekton Latest Version Workflow Rustc Version 1.66+


Author(s): Nicholas O'Kelley

Date started: 2022-08-28

Motivation

I needed a tool to speed up the time I spent reviewing snippets on the friendly-snippet project.

The goals of such a tool are:

  • Sort many files blazingly fast
  • (Ideally) Sort alphabetically blazingly fast
  • Convert between snipmate and friendly-snippets (json) formats blazingly ... fast

Installation and Usage

For published versions

  • cargo install tekton

For source builds

From the project root:

  • cargo install --path ./

Usage

To convert:

  • tekton convert <INPUT_FILENAME> <OUTPUT_FILENAME>

Note:

  • Conversion supports bidirectional conversion between Snipmate (*.snippet) and JSON (*.json) snippets
  • Mapping is based on the input file

To sort:

  • General format: tekton sort <INPUT_FILENAME> [INTERACTIVE] [CRAWL]
    • To sort a single file: tekton sort <INPUT_NAME>
    • To sort a directory: tekton sort <INPUT_NAME> no true

Note:

  • INTERACTIVE should be the string yes if the user wants to fix any errors during the sort.

    • Leaving this off will simply mean an error report is displayed on screen
  • CRAWL must be present to recursively walk the directories for snippets

    • Any text present will result in a crawl, though true looks better.

Demos

  • Conversion from Snipmate to JSON

json-bay-bee

  • Conversion from the JSON snippets to Snipmate

Conversion

  • Sorting friendly-snippets, blazingly fast , with interactive mode off and directory crawling on.

Sorting


Current Limitations

  1. The conversion doesn't process in large batches of files like the sort. This is intentional as conversions between formats should be isolated and limited in scope.

    • This can be automated via other scripting means (Rust, Go, Python, etc).
  2. Snippet files with an array in the prefix field (even if it is just one) will convert all the snippets in the file to then have their snippets inserted into an array too.

    • Note: I am partially working on writing a custom Serialize and Deserialize implementation to handle clean up the serialization for one element, though that will be tied to a future update.
  3. Currently do not sort Snipmate snippets.

    • This was outside the scope, but might be something I consider in the future.

Acknowledgements

  • My impatience for doing this by hand

Dependencies

~4–12MB
~143K SLoC