coveralls: 
[![Coverage Status](https://coveralls.io/builds/18793185/badge)](https://coveralls.io/builds/18793185)

Coverage increased (+1.3%) to 93.163% when pulling **ba97a0b43331d67a50205adef6ee757ad8650b88 on Rogdham:fix-54** into **8cca7a53626e8c25039423dc9cd8db843447f813 on miyuchina:master**.

diff --git a/mistletoe/block_token.py b/mistletoe/block_token.py
index 0a4c2c0..7eeb3f1 100644
--- a/mistletoe/block_token.py
+++ b/mistletoe/block_token.py
@@ -574,6 +574,9 @@ class ListItem(BlockToken):
             if not cls.in_continuation(next_line, prepend):
                 # directly followed by another token
                 if cls.other_token(next_line):
+                    if newline:
+                        lines.backstep()
+                        del line_buffer[-newline:]
                     break
                 # next_line is a new list item
                 marker_info = cls.parse_marker(next_line)

lists should not contain <p>
Why do you use &lt;p&gt;&lt;/p&gt; in lists ? This is not the way Commonmark does it.

Other strange behavior: in the same document, some lists get the paragraphs, some others don't. Could you explain how it is supposed to work ?
diff --git a/test/test_block_token.py b/test/test_block_token.py
index b3c94b1..78fb0b2 100644
--- a/test/test_block_token.py
+++ b/test/test_block_token.py
@@ -191,6 +191,14 @@ class TestListItem(unittest.TestCase):
         list_item = block_token.tokenize(lines)[0].children[0]
         self.assertEqual(list_item.loose, False)
 
+    def test_tight_list(self):
+        lines = ['- foo\n',
+                 '\n',
+                 '# bar\n']
+        f = FileWrapper(lines)
+        list_item = block_token.tokenize(lines)[0].children[0]
+        self.assertEqual(list_item.loose, False)
+
 
 class TestList(unittest.TestCase):
     def test_different_markers(self):

pip install -e .
parse_log_pytest
pytest
pytest
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
exceptiongroup @ file:///croot/exceptiongroup_1706031385326/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
-e git+https://github.com/miyuchina/mistletoe.git@8cca7a53626e8c25039423dc9cd8db843447f813#egg=mistletoe
packaging @ file:///croot/packaging_1734472117206/work
pluggy @ file:///croot/pluggy_1733169602837/work
pytest @ file:///croot/pytest_1738938843180/work
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work

name: mistletoe
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - exceptiongroup=1.2.0=py39h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.2=py39h06a4308_0
  - pip=25.0=py39h06a4308_0
  - pluggy=1.5.0=py39h06a4308_0
  - pytest=8.3.4=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py39h06a4308_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
prefix: /opt/conda/envs/mistletoe

test/test_block_token.py::TestListItem::test_tight_list
test/test_block_token.py::TestATXHeading::test_children_with_enclosing_hashes test/test_block_token.py::TestATXHeading::test_heading_in_paragraph test/test_block_token.py::TestATXHeading::test_match test/test_block_token.py::TestATXHeading::test_not_heading test/test_block_token.py::TestSetextHeading::test_match test/test_block_token.py::TestSetextHeading::test_next test/test_block_token.py::TestQuote::test_lazy_continuation test/test_block_token.py::TestQuote::test_match test/test_block_token.py::TestCodeFence::test_fence_code_lazy_continuation test/test_block_token.py::TestCodeFence::test_match_fenced_code test/test_block_token.py::TestCodeFence::test_match_fenced_code_with_tilda test/test_block_token.py::TestCodeFence::test_mixed_code_fence test/test_block_token.py::TestCodeFence::test_no_wrapping_newlines_code_fence test/test_block_token.py::TestCodeFence::test_unclosed_code_fence test/test_block_token.py::TestBlockCode::test_parse_indented_code test/test_block_token.py::TestParagraph::test_parse test/test_block_token.py::TestParagraph::test_read test/test_block_token.py::TestListItem::test_deep_list test/test_block_token.py::TestListItem::test_loose_list test/test_block_token.py::TestListItem::test_parse_marker test/test_block_token.py::TestListItem::test_sublist test/test_block_token.py::TestListItem::test_tokenize test/test_block_token.py::TestList::test_different_markers test/test_block_token.py::TestList::test_sublist test/test_block_token.py::TestTable::test_easy_table test/test_block_token.py::TestTable::test_match test/test_block_token.py::TestTable::test_not_easy_table test/test_block_token.py::TestTable::test_parse_align test/test_block_token.py::TestTable::test_parse_delimiter test/test_block_token.py::TestTableRow::test_easy_table_row test/test_block_token.py::TestTableRow::test_match test/test_block_token.py::TestTableCell::test_match test/test_block_token.py::TestFootnote::test_store test/test_block_token.py::TestDocument::test_auto_splitlines test/test_block_token.py::TestDocument::test_store_footnote test/test_block_token.py::TestThematicBreak::test_match test/test_block_token.py::TestContains::test_contains
mistletoe/block_token.py
mistletoe/block_token.py