djlint / djLint

✨ HTML Template Linter and Formatter. Django - Jinja - Nunjucks - Handlebars - GoLang
https://djLint.com
GNU General Public License v3.0
686 stars 84 forks source link

[BUG] [Formatter] formatting not disabled inside <!-- djlint:off --> #769

Open ruanmed opened 1 year ago

ruanmed commented 1 year ago

System Info

Issue

In an HTML file (e.g.: file.html), djlint --reformat file.html ignores <!-- djlint:off --> tags and still reformats the content after the tag and before the <!-- djlint:on --> closing tag.

Issue is similar to #166

This behavior is inconsistent with documentation of djlint available on https://www.djlint.com/docs/ignoring-code/ for For plain old html - ignoring.

How To Reproduce

  1. Execute djlint --reformat file.html where file.html has the following contents:
    <div>
    <ul class="sub-menu collapse"
          id="functional">
    <li>
    <a id="id1"
        href="#/id1"
        onclick="doSomething()">
    <i class="fa fa-search"
        aria-hidden="true"></i> Item 1
    </a>
    </li>
    <li>
    <a id="id2"
        href="#/id2"
        onclick="doSomething()">
    <i class="fas fa-search"></i> Item 2
    </a>
    </li>
    <li>
    <a id="id3"
        href="#/id3"
        onclick="doSomething()">
    <i class="fas fa-search"></i> Item 3
    </a>
    </li>
    <!-- djlint:off -->
    <!-- HIDDEN -->
    <!--<li>-->
    <!--<a id="id4" href="#/id4" onclick="doSomething()">-->
    <!--<i class="fa fa-search" aria-hidden="true"></i> Item 4-->
    <!--</a>-->
    <!--</li>-->
    <!-- djlint:on -->
    </ul>
    </div>
  2. The file.html gets reformated to:
    <div>
    <ul class="sub-menu collapse"
      id="functional">
    <li>
      <a id="id1"
         href="#/id1"
         onclick="doSomething()">
        <i class="fa fa-search"
           aria-hidden="true"></i> Item 1
      </a>
    </li>
    <li>
      <a id="id2"
         href="#/id2"
         onclick="doSomething()">
        <i class="fas fa-search"></i> Item 2
      </a>
    </li>
    <li>
      <a id="id3"
         href="#/id3"
         onclick="doSomething()">
        <i class="fas fa-search"></i> Item 3
      </a>
    </li>
    <!-- djlint:off -->
    <!-- HIDDEN -->
    <!--<li>-->
    <!--<a id="id4"
    href="#/id4"
    onclick="doSomething()">-->
    <!--<i class="fa fa-search" aria-hidden="true"></i> Item 4-->
    <!--</a>-->
    <!--</li>-->
    <!-- djlint:on -->
    </ul>
    </div>

    However, it should have been:

    <div>
    <ul class="sub-menu collapse"
      id="functional">
    <li>
      <a id="id1"
         href="#/id1"
         onclick="doSomething()">
        <i class="fa fa-search"
           aria-hidden="true"></i> Item 1
      </a>
    </li>
    <li>
      <a id="id2"
         href="#/id2"
         onclick="doSomething()">
        <i class="fas fa-search"></i> Item 2
      </a>
    </li>
    <li>
      <a id="id3"
         href="#/id3"
         onclick="doSomething()">
        <i class="fas fa-search"></i> Item 3
      </a>
    </li>
    <!-- djlint:off -->
    <!-- HIDDEN -->
    <!--<li>-->
    <!--<a id="id4" href="#/id4" onclick="doSomething()">-->
    <!--<i class="fa fa-search" aria-hidden="true"></i> Item 4-->
    <!--</a>-->
    <!--</li>-->
    <!-- djlint:on -->
    </ul>
    </div>
welcome[bot] commented 1 year ago

Thanks for opening your first issue here!

baseplate-admin commented 11 months ago

Same for this type of code


<div
   _ = "
   {# djlint:off #}
   js
        console.log(1)
   end
   {# djlint:on #}
    "
></div>
myrgy commented 8 months ago

Hello,

is there any updates on this? Can I help to fix it?

Thanks!