Last active
July 29, 2024 10:33
-
-
Save liautaud/88959c8d0b9ad4b1564ae90ff40c693c to your computer and use it in GitHub Desktop.
Small Python script to patch the IntelliJ TailwindCSS plugin.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import re | |
from zipfile import ZipFile, Path | |
""" | |
TailwindCSS plugin patcher for IntelliJ IDEA | |
-------------------------------------------- | |
1. Download the latest ZIP of the plugin compatible with your version of IntelliJ here: | |
https://plugins.jetbrains.com/plugin/15321-tailwind-css/versions | |
2. Fill `CLASS_ATTRIBUTES` to specify which XML attributes can contain Tailwind classes. | |
3. Fill `CLASS_REGEXES` to add completion regexes using the format described here: | |
https://github.com/tailwindlabs/tailwindcss/issues/7553#issuecomment-735915659 | |
4. Run the script with `python3 tailwind-plugin-patcher.py`. | |
5. Install the patched ZIP via Preferences > Plugins > Gear Icon > Install plugin from disk. | |
""" | |
SOURCE_ARCHIVE_PATH = "tailwindcss-222.3739.24.zip" | |
PATCHED_ARCHIVE_PATH = "tailwindcss-222.3739.24-patched.zip" | |
CLASS_ATTRIBUTES = r'["class", "className", "\\w+ClassName"]' | |
CLASS_REGEXES = r'[]' | |
# ------------------------------------------ | |
script_path = "tailwindcss/server/tailwindcss-language-server" | |
class_attributes_search = "(yield s.editor.getConfiguration(l.uri)).tailwindCSS.classAttributes" | |
class_regexes_search = '[A-Z][a-z]\(f,"tailwindCSS\.experimental\.classRegex",\[\]\)' | |
with ZipFile(SOURCE_ARCHIVE_PATH, "r") as source_archive: | |
with ZipFile(PATCHED_ARCHIVE_PATH, "w") as patched_archive: | |
# Copy everything except the script file. | |
patched_archive.comment = source_archive.comment | |
for item in source_archive.infolist(): | |
if item.filename != script_path: | |
patched_archive.writestr(item, source_archive.read(item.filename)) | |
# Write the new script file. | |
with Path(source_archive, script_path).open("r") as script: | |
patched = script.read().replace(class_attributes_search, CLASS_ATTRIBUTES) | |
patched = re.sub(class_regexes_search, CLASS_REGEXES, patched) | |
with Path(patched_archive, script_path).open("w") as script: | |
script.write(patched) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment