downcase! directive to use with ruby injections

```
(#downcase! "language")
```

downcase! will ensure the metadata value for the specified key will be
downcased. If the value is a node, it will downcase the text specified
by the node.

```
(#downcase! @node "key")
```

You can also namespace the key with a specific capture, similar to how
you can call `(#set! @node "key" "value")`
This commit is contained in:
derekstride 2021-04-15 15:48:48 -02:30 committed by Thomas Vigouroux
parent ee2266993b
commit e98e2eafa2
2 changed files with 33 additions and 0 deletions

View file

@ -87,3 +87,30 @@ end)
-- Just avoid some anoying warnings for this directive
query.add_directive('make-range!', function() end)
query.add_directive('downcase!', function(match, _, bufnr, pred, metadata)
local text, key, value
if #pred == 3 then
-- (#downcase! @capture "key")
key = pred[3]
value = metadata[pred[2]][key]
else
-- (#downcase! "key")
key = pred[2]
value = metadata[key]
end
if type(value) == "string" then
text = value
else
local node = match[value]
text = query.get_node_text(node, bufnr)
end
if #pred == 3 then
metadata[pred[2]][key] = string.lower(text)
else
metadata[key] = string.lower(text)
end
end)