Fix: scripts- Incorrect <div> Tag Handling logic (#12429)

* Fix: scripts- Incorrect <div> Tag Handling logic

* added comments for <div> tags handling logic

Co-authored-by: Gabriele Ciccotelli <gabrieleciccotelli98@gmail.com>

---------

Co-authored-by: Gabriele Ciccotelli <gabrieleciccotelli98@gmail.com>
This commit is contained in:
Bhavishya
2025-10-16 07:44:18 +05:30
committed by GitHub
parent 4d71a7e0c6
commit a1caec25a9

View File

@@ -247,21 +247,23 @@ def lint_file(path, cfg):
# Skip lines that start a code block (```)
if CODE_FENCE_START.match(line): continue
# Check for block-level directionality changes (e.g., <div dir="rtl">)
m_div_open = HTML_DIR_ATTR_RE.search(line)
# Find all opening and closing <div> tags on the line to handle cases
# where there can be multiple <div> opening and closing on the same line
div_tags = re.findall(r"(<div[^>]*dir=['\"](rtl|ltr)['\"][^>]*>|</div>)", line, re.IGNORECASE)
# If an opening <div dir="..." markdown="1"> tag is found
if m_div_open and 'markdown="1"' in line:
new_div_ctx = m_div_open.group(2).lower() # Extract the new directionality context from the opening div tag
block_context_stack.append(new_div_ctx) # Push the new directionality context onto the stack
continue # Continue to the next line of the file
# If a closing </div> tag is found and we are inside a div context
# (i.e., the stack has more than just the base file_direction_ctx)
if '</div>' in line and len(block_context_stack) > 1:
block_context_stack.pop() # Pop the last directionality context from the stack
continue # Continue to the next line of the file
# Process each found tag in order to correctly update the context stack
for tag_tuple in div_tags:
# re.findall with multiple capture groups returns a list of tuples:
# tag: The full matched tag (e.g., '<div...>' or '</div>')
# direction: The captured direction ('rtl' or 'ltr'), or empty for a closing tag
tag, direction = tag_tuple
# If it's an opening tag with 'markdown="1"', push the new context
if tag.startswith('<div') and 'markdown="1"' in tag:
block_context_stack.append(direction.lower())
# If it's a closing tag and we are inside a div, pop the context
elif tag == '</div>' and len(block_context_stack) > 1:
block_context_stack.pop()
# Check if the line is a Markdown list item
list_item = LIST_ITEM_RE.match(line)
@@ -389,10 +391,16 @@ def lint_file(path, cfg):
f"::{sev['pure_ltr'].lower()} file={path},line={idx}::Pure LTR text '{s}' in {part} of RTL context may need trailing '&rlm;' marker."
)
# Check for unclosed div tags at the end of the file
if len(block_context_stack) > 1:
issues.append(
f"::error file={path},line={len(lines)}::Found unclosed <div dir='...'> tag. "
f"The final block context is '{block_context_stack[-1]}', not the file's base '{file_direction_ctx}'."
)
# Return the list of found issues
return issues
def get_changed_lines_for_file(filepath):
"""
Returns a set of line numbers (1-based) that were changed in the given file in the current PR.