Add support to LiquidDoc with the new {% doc %} tag

This commit is contained in:
Guilherme Carreiro
2025-02-20 09:37:11 +01:00
parent bfe29e11be
commit 2531f42b74
5 changed files with 249 additions and 7 deletions
+2
View File
@@ -19,6 +19,7 @@ require_relative "tags/comment"
require_relative "tags/raw"
require_relative "tags/render"
require_relative "tags/cycle"
require_relative "tags/doc"
module Liquid
module Tags
@@ -42,6 +43,7 @@ module Liquid
'if' => If,
'echo' => Echo,
'tablerow' => TableRow,
'doc' => Doc,
}.freeze
end
end
+11 -6
View File
@@ -15,6 +15,8 @@ module Liquid
# {% endcomment %}
# @liquid_syntax_keyword content The content of the comment.
class Comment < Block
TAG_NAME = "comment"
def render_to_output_buffer(_context, output)
output
end
@@ -34,7 +36,10 @@ module Liquid
end
parse_context.depth += 1
comment_tag_depth = 1
tag_depth = 1
begin_tag = self.class::TAG_NAME
end_tag = "end#{self.class::TAG_NAME}"
begin
# Consume tokens without creating child nodes.
@@ -57,13 +62,13 @@ module Liquid
case tag_name
when "raw"
parse_raw_tag_body(tokenizer)
when "comment"
comment_tag_depth += 1
when "endcomment"
comment_tag_depth -= 1
when begin_tag
tag_depth += 1
when end_tag
tag_depth -= 1
end
if comment_tag_depth.zero?
if tag_depth.zero?
parse_context.trim_whitespace = (token[-3] == WhitespaceControl) unless tokenizer.for_liquid_tag
return false
end
+30
View File
@@ -0,0 +1,30 @@
# frozen_string_literal: true
module Liquid
# @liquid_public_docs
# @liquid_type tag
# @liquid_category syntax
# @liquid_name doc
# @liquid_summary
# Documents template elements with annotations.
# @liquid_description
# The `doc` tag allows developers to include documentation within Liquid
# templates. Any content inside `doc` tags is not rendered or outputted.
# Liquid code inside will be parsed but not executed. This facilitates
# tooling support for features like code completion, linting, and inline
# documentation.
# @liquid_syntax
# {% doc %}
# Renders a message.
#
# @param {string} foo - A foo value.
# @param {string} [bar] - An optional bar value.
#
# @example
# {% render 'message', foo: 'Hello', bar: 'World' %}
# {% enddoc %}
# {{ foo }}, {{ bar }}!
class Doc < Comment
TAG_NAME = "doc"
end
end