Files
computer-playbook/plugins/filter/sed.py
T
kevinveenbirkenbachandClaude Opus 5 5137465c6f style: delete every comment the comments-valid policy rejects
3529 invalid comments in 528 files, grandfathered in while the linter
only saw the working-tree diff. Removal ran through the linter's own
collectors, so detection and deletion cannot drift: a comment whose
opener line is blank before it and whose closer line is blank after it
loses all its lines, anything else loses only the comment region, and a
line left holding a bare delimiter goes with it.

Five files keep their comments behind a nocheck marker instead. Four are
upstream configs whose inline docs are upstream's own (mautrix, systemd
journald, nextcloud-oidc-login, MediaWiki). In littlejs the
commented-out entries ARE the deactivation mechanism for an example
tile, so deleting them would delete configuration.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 03:22:02 +02:00

49 lines
1008 B
Python

# sed-safe escaping for replacement strings.
#
# Intended usage:
# sed "s<d>PATTERN<d>{{ value | sed_escape('<d>') }}<d>"
#
# Escapes:
# - backslash (\)
# - ampersand (&) → sed replacement reference
# - delimiter (default: |)
#
# Does NOT:
# - add quotes
# - perform shell escaping
#
# Safe for:
# - sed replacement part
# - passwords containing $, ', ", spaces, /, etc.
#
from __future__ import annotations
class FilterModule:
def filters(self):
return {
"sed_escape": self.sed_escape,
}
@staticmethod
def sed_escape(value, delimiter: str = "|") -> str:
"""
Escape a value for use as the *replacement* part of a sed s/// command.
Example:
{{ password | sed_escape('|') }}
"""
if value is None:
return ""
s = str(value)
s = s.replace("\\", "\\\\")
s = s.replace("&", "\\&")
if delimiter:
s = s.replace(delimiter, "\\" + delimiter)
return s