From d321a65b9cff67732254eb24e6818ab56f2a87a1 Mon Sep 17 00:00:00 2001 From: david Date: Fri, 9 Jan 2026 13:47:27 +0100 Subject: [PATCH 1/3] fix: resolve absolute path for ignore-paths --- src/doc8/main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/doc8/main.py b/src/doc8/main.py index feb8cb6..526611d 100644 --- a/src/doc8/main.py +++ b/src/doc8/main.py @@ -244,7 +244,9 @@ def validate(cfg, files, result=None): f = files.popleft() if cfg.get("verbose"): print("Validating %s" % f) - targeted_ignoreables = set(ignore_targeted.get(f.filename, set())) + targeted_ignoreables = set( + ignore_targeted.get(os.path.abspath(f.filename), set()), + ) targeted_ignoreables.update(ignoreables) for c in fetch_checks(cfg): check_name = ".".join([c.__class__.__module__, c.__class__.__name__]) From 782aa36f46a335a3c4ac0fe98a9426c239723243 Mon Sep 17 00:00:00 2001 From: david Date: Fri, 9 Jan 2026 15:32:16 +0100 Subject: [PATCH 2/3] add test for filepath resolution --- src/doc8/tests/.test_main.py.swp | Bin 0 -> 16384 bytes src/doc8/tests/test_main.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/doc8/tests/.test_main.py.swp diff --git a/src/doc8/tests/.test_main.py.swp b/src/doc8/tests/.test_main.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..28ae04ceaa20fb0c4c8a427ee289b75c2d03e9fd GIT binary patch literal 16384 zcmeI3ZEPGz8ONtdN@+{lP!L5bLc_WxXSmzgZUe3xgMxFZT=^x~mzUPDmhs-)-8Or> zm)$wPBr5%Y5EKCdiAWJ25QHZd%u2-rwyx>$zRLl3ge`sTakLrs1s-Zi&FOFRELCILf`{<|B6kcGr);2cI@8$~R z3S6ZEyV>0%!+LfOSnuL*x$Wpx`peC81#$&)1#$&)1#$&)1#$&)1#$)cmlRN~>)E4d z@Q$R>>FN8ro*zKnT0RH};p8sFDm9dw= zZ^4hjx51~tV_*@S1P8#KU;w-symAX;e+It+Uk9ro1joS#fdy^`&+mpm@M-W7FamA? zH-Q_$Ki_^}{SOgVt0Ne>~0Dr%c zu^)mjg43W3ZU-;Fk+F;5Z{U~UE8sL}fFocO+yQohXK!Ha3Gi|7Ab2m>1$KfR;N>?k z_9XZwI1iRV1-uWu9o!E7c|Bv#foH)};5*BnlDc!tmqv$c@ z)?SG`B@3>x?LL0RQw<)rWKalWyCqb^emL|3?M8nsYU@BWnf^Nvb4Xa*IAGg}7 zRvNVixrlY8u}({}A{f1>3FM^6(-vffYqXW;+fh?RQg$D08c98K9J%T#$4SJ0kBI7V zwv&-m?I_R#pxZ#5Mt7R0s$SIZkILxkN?^WYBr44ohXt>NZ4z4XyJBAAk!*&`k}t_x z7)c(rg8-dJ0N~&9So|(C>Lgr|rH<%#B)nMiW5RFCaukJ8p;PMBsBKzm^a@@wEi@96 zy$&X-#K$|;^~k`sE|t4dEnq+@(?<@^JBKFcoSB2u&!r zyLBJ%vA;BItF#m!b?IvyWgB+IuK)fAyr#!@jcNWG(|Hx4pOdqNZj|WGn3iu^>Q|lQ z(H$9jy@#lg^xo9y>;Lu#O|%g5lEc0QHL*@Wb@EJ0gc*SDC{38k={S`*{j)UNr6nb{ z^)iAu^{Sp)!>|mcOUee-Du`+y!W?g4Es0ygl`t6AUEHAdj9fuwSq`eRwZpWsU8e4| zSfyodN(OZu@%eib(WlvqvjOj#iw5M<$)Q@{!rO3Yvxy zJc%tx@@m*%WU|A(nRw~L^0B74*>bEot`fhZ5$Aj^d8z0r$@i|Cp8YdvF9vNZo1Pi9 z9fRK4vK@>5xkxsbRbk^0-nuXAV{tppOQU=*)1RM=Q-+DHb6tT8ywk$Tlr$Sf1bu(K= z+79ZMR?Ju}3Y%tMLI1R!d$fU6`UXxAD05WU^o!VcdO=dT9e9d7*mQ154W>oibEk2m z$no-Y8^*5}rse6@izN?8ouuEf|LlC!r;7Aj7&AKm591uUhO;J}|EH1z;Zr!ze+_&I zd<@WezXbk(^ZPHr&%u|04;DcQT*TS^1@JVu03HM7VQk)&|LC_)GPwQh=tERh?8`$D>N=O72P_Hn zQr5`CdG=`~6I|M160Y|lH$O~2MkrpBKsVnPnU16qMN-K`5-b%0i7luw^ldt`FS5+g zqS)kNdg6@sx(+3aY_qUAL5OjMZ~SGU8w?bY>mofy)(iRb%%Y{M(Oo=?Hr5#r7&9tO zFTIy8Sjd~VaKM$eLwQR8USk1>oowU+n!X{ zjQqMa*O2(SJ=>MOH+*SE=ryDh>z(y*e8DV-nJom$^h+AQN7nU!>q*7Z`PX@BcHee2 dD_7qWx=Vj@8+|IW{{pz77}Nj& literal 0 HcmV?d00001 diff --git a/src/doc8/tests/test_main.py b/src/doc8/tests/test_main.py index 08e6b87..bb96785 100644 --- a/src/doc8/tests/test_main.py +++ b/src/doc8/tests/test_main.py @@ -2,10 +2,13 @@ import shutil import sys import unittest +from collections import deque from io import StringIO from unittest.mock import MagicMock, patch +from doc8.checks import ContentCheck from doc8.main import doc8, from_toml, main +from doc8.parser import ParsedFile # Location to create test files TMPFS_DIR_NAME = ".tmp" @@ -365,6 +368,32 @@ def test_args__ignore_path_errors__overrides_default(self): ), ) + def test_args__ignore_path_errors__resolves_path(self): + mock_check = MagicMock(spec=ContentCheck) + mock_check.report_iter.return_value = [(40, "D002", "Testing")] + mock_fetch_checks = MagicMock(return_value=[mock_check]) + mock_parsed_file = MagicMock(spec=ParsedFile) + mock_parsed_file.filename = "path" + mock_scan = MagicMock(return_value=(deque([mock_parsed_file]), 0)) + with ( + patch("doc8.main.fetch_checks", mock_fetch_checks), + patch("doc8.main.scan", mock_scan), + patch( + "argparse._sys.argv", + ["doc8", "--ignore-path-errors", "path;D002"], + ), + ): + state = main() + self.assertEqual(state, 0) + mock_scan.assert_called_once_with( + self.get_args( + ignore_path_errors={"path": {"D002"}}, + ), + ) + mock_fetch_checks.assert_called_once() + mock_check.report_iter.assert_called() + mock_check.assert_not_called() + def test_args__default_extension__overrides_default(self): mock_scan = MagicMock(return_value=([], 0)) with ( From af93032fc9132531ac2315a8c158077cd62d96a5 Mon Sep 17 00:00:00 2001 From: david Date: Fri, 9 Jan 2026 15:42:03 +0100 Subject: [PATCH 3/3] remove accidentally commited swap file --- src/doc8/tests/.test_main.py.swp | Bin 16384 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/doc8/tests/.test_main.py.swp diff --git a/src/doc8/tests/.test_main.py.swp b/src/doc8/tests/.test_main.py.swp deleted file mode 100644 index 28ae04ceaa20fb0c4c8a427ee289b75c2d03e9fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeI3ZEPGz8ONtdN@+{lP!L5bLc_WxXSmzgZUe3xgMxFZT=^x~mzUPDmhs-)-8Or> zm)$wPBr5%Y5EKCdiAWJ25QHZd%u2-rwyx>$zRLl3ge`sTakLrs1s-Zi&FOFRELCILf`{<|B6kcGr);2cI@8$~R z3S6ZEyV>0%!+LfOSnuL*x$Wpx`peC81#$&)1#$&)1#$&)1#$&)1#$)cmlRN~>)E4d z@Q$R>>FN8ro*zKnT0RH};p8sFDm9dw= zZ^4hjx51~tV_*@S1P8#KU;w-symAX;e+It+Uk9ro1joS#fdy^`&+mpm@M-W7FamA? zH-Q_$Ki_^}{SOgVt0Ne>~0Dr%c zu^)mjg43W3ZU-;Fk+F;5Z{U~UE8sL}fFocO+yQohXK!Ha3Gi|7Ab2m>1$KfR;N>?k z_9XZwI1iRV1-uWu9o!E7c|Bv#foH)};5*BnlDc!tmqv$c@ z)?SG`B@3>x?LL0RQw<)rWKalWyCqb^emL|3?M8nsYU@BWnf^Nvb4Xa*IAGg}7 zRvNVixrlY8u}({}A{f1>3FM^6(-vffYqXW;+fh?RQg$D08c98K9J%T#$4SJ0kBI7V zwv&-m?I_R#pxZ#5Mt7R0s$SIZkILxkN?^WYBr44ohXt>NZ4z4XyJBAAk!*&`k}t_x z7)c(rg8-dJ0N~&9So|(C>Lgr|rH<%#B)nMiW5RFCaukJ8p;PMBsBKzm^a@@wEi@96 zy$&X-#K$|;^~k`sE|t4dEnq+@(?<@^JBKFcoSB2u&!r zyLBJ%vA;BItF#m!b?IvyWgB+IuK)fAyr#!@jcNWG(|Hx4pOdqNZj|WGn3iu^>Q|lQ z(H$9jy@#lg^xo9y>;Lu#O|%g5lEc0QHL*@Wb@EJ0gc*SDC{38k={S`*{j)UNr6nb{ z^)iAu^{Sp)!>|mcOUee-Du`+y!W?g4Es0ygl`t6AUEHAdj9fuwSq`eRwZpWsU8e4| zSfyodN(OZu@%eib(WlvqvjOj#iw5M<$)Q@{!rO3Yvxy zJc%tx@@m*%WU|A(nRw~L^0B74*>bEot`fhZ5$Aj^d8z0r$@i|Cp8YdvF9vNZo1Pi9 z9fRK4vK@>5xkxsbRbk^0-nuXAV{tppOQU=*)1RM=Q-+DHb6tT8ywk$Tlr$Sf1bu(K= z+79ZMR?Ju}3Y%tMLI1R!d$fU6`UXxAD05WU^o!VcdO=dT9e9d7*mQ154W>oibEk2m z$no-Y8^*5}rse6@izN?8ouuEf|LlC!r;7Aj7&AKm591uUhO;J}|EH1z;Zr!ze+_&I zd<@WezXbk(^ZPHr&%u|04;DcQT*TS^1@JVu03HM7VQk)&|LC_)GPwQh=tERh?8`$D>N=O72P_Hn zQr5`CdG=`~6I|M160Y|lH$O~2MkrpBKsVnPnU16qMN-K`5-b%0i7luw^ldt`FS5+g zqS)kNdg6@sx(+3aY_qUAL5OjMZ~SGU8w?bY>mofy)(iRb%%Y{M(Oo=?Hr5#r7&9tO zFTIy8Sjd~VaKM$eLwQR8USk1>oowU+n!X{ zjQqMa*O2(SJ=>MOH+*SE=ryDh>z(y*e8DV-nJom$^h+AQN7nU!>q*7Z`PX@BcHee2 dD_7qWx=Vj@8+|IW{{pz77}Nj&