camspiers / snap

A fast finder system for neovim.
The Unlicense
483 stars 16 forks source link

Tags #94

Closed tex closed 2 months ago

tex commented 3 months ago

Adding tags support for GLOBAL and TTAGS.

ttags - https://github.com/tex/ttags global - https://www.gnu.org/software/global

Example use:

pcall(require, 'luarocks.loader')
local snap = require'snap'
snap.register.map({"n"}, {"<Leader>ft"}, function ()
  snap.run {
    producer = snap.get'consumer.positions'(
                snap.get'consumer.score'(
                  snap.get'producer.tags.symbol')),
    prompt = "tag completion>",
    steps = {{
      consumer = snap.get'consumer.fzy',
      config = {prompt = "tag fzy>", initial_filter = function (filter) return string.gsub(filter, "%%", "") end}
    }},
    select = function (result)
      snap.run {
        producer = snap.get'consumer.score'(snap.get'producer.tags.def'),
        initial_filter = tostring(result),
        prompt = "tag def>",
        steps = {{
          consumer = snap.get'consumer.fzy',
          config = {prompt = "tag fzy>"}
        }},
        select = snap.get'select.grep'.select,
        multiselect = snap.get'select.grep'.multiselect,
        views = {snap.get'preview.grep'},
      } end,
  }
end)

snap.register.map({"n"}, {"<Leader>fd"}, function ()
  snap.run {
    producer = snap.get'consumer.score'(
                 snap.get'producer.tags.def'),
    prompt = "tag def>",
    initial_filter = snap.config.get_initial_filter({filter_with = "cword"}),
    steps = {{
      consumer = snap.get'consumer.fzy',
      config = {prompt = "tag fzy>"}
    }},
    select = snap.get'select.grep'.select,
    multiselect = snap.get'select.grep'.multiselect,
    views = {snap.get'preview.grep'},
  }
end)

snap.register.map({"n"}, {"<Leader>fr"}, function ()
  snap.run {
    producer = snap.get'consumer.score'(
                 snap.get'producer.tags.ref'),
    prompt = "tag ref>",
    initial_filter = snap.config.get_initial_filter({filter_with = "cword"}),
    steps = {{
      consumer = snap.get'consumer.fzy',
      config = {prompt = "tag fzy>"}
    }},
    select = snap.get'select.grep'.select,
    multiselect = snap.get'select.grep'.multiselect,
    views = {snap.get'preview.grep'},
  }
end)

PS: I really love how Snap is easy understandable, extendable, performant, usable and written in lisp.

tex commented 3 months ago

@camspiers