SF.net SVN: docutils:[10094 ] trunk/docutils

milde--- via Docutils-checkins <[email protected]> Fri, 18 Apr 2025 15:48:46 +0000
Newsgroups gmane.text.docutils.cvs
Message-ID <[email protected]>
Revision: 10094
          http://sourceforge.net/p/docutils/code/10094
Author:   milde
Date:     2025-04-18 15:48:45 +0000 (Fri, 18 Apr 2025)
Log Message:
-----------
More precise INFO if explicit target name overrides implicit one.

Modified Paths:
--------------
    trunk/docutils/docutils/nodes.py
    trunk/docutils/test/test_parsers/test_rst/test_targets.py

Modified: trunk/docutils/docutils/nodes.py
===================================================================
--- trunk/docutils/docutils/nodes.py	2025-04-17 21:44:18 UTC (rev 10093)
+++ trunk/docutils/docutils/nodes.py	2025-04-18 15:48:45 UTC (rev 10094)
@@ -1904,18 +1904,18 @@
                               ) -> None:
         old_id = self.nameids[name]
         old_explicit = self.nametypes[name]
+        old_node = self.ids.get(old_id)
         self.nametypes[name] = old_explicit or explicit
         if explicit:
             if old_explicit:
                 level = 2
                 if old_id is not None:
-                    old_node = self.ids[old_id]
                     if 'refuri' in node:
                         refuri = node['refuri']
                         if (old_node['names']
                             and 'refuri' in old_node
                             and old_node['refuri'] == refuri):
-                            level = 1   # just inform if refuri's identical
+                            level = 1  # just inform if refuri is identical
                     if level > 1:
                         dupname(old_node, name)
                         self.nameids[name] = None
@@ -1925,21 +1925,21 @@
                 if msgnode is not None:
                     msgnode += msg
                 dupname(node, name)
-            else:
+            else:  # new explicit, old implicit -> silently overwrite
                 self.nameids[name] = id
                 if old_id is not None:
-                    old_node = self.ids[old_id]
                     dupname(old_node, name)
-        else:
+        else:  # new name is implicit
             if old_id is not None and not old_explicit:
                 self.nameids[name] = None
-                old_node = self.ids[old_id]
                 dupname(old_node, name)
             dupname(node, name)
         if not explicit or (not old_explicit and old_id is not None):
-            msg = self.reporter.info(
-                'Duplicate implicit target name: "%s".' % name,
-                backrefs=[id], base_node=node)
+            if explicit:
+                s = f'Target name overrides implicit target name "{name}".'
+            else:
+                s = f'Duplicate implicit target name: "{name}".'
+            msg = self.reporter.info(s, backrefs=[id], base_node=node)
             if msgnode is not None:
                 msgnode += msg
 

Modified: trunk/docutils/test/test_parsers/test_rst/test_targets.py
===================================================================
--- trunk/docutils/test/test_parsers/test_rst/test_targets.py	2025-04-17 21:44:18 UTC (rev 10093)
+++ trunk/docutils/test/test_parsers/test_rst/test_targets.py	2025-04-18 15:48:45 UTC (rev 10094)
@@ -271,7 +271,7 @@
             Title
         <system_message backrefs="title-1" level="1" line="6" source="test data" type="INFO">
             <paragraph>
-                Duplicate implicit target name: "title".
+                Target name overrides implicit target name "title".
         <target ids="title-1" names="title">
         <paragraph>
             Paragraph.
@@ -295,7 +295,7 @@
         <pending ids="title-1" names="title">
             <system_message backrefs="title-1" level="1" line="7" source="test data" type="INFO">
                 <paragraph>
-                    Duplicate implicit target name: "title".
+                    Target name overrides implicit target name "title".
             .. internal attributes:
                  .transform: docutils.transforms.references.TargetNotes
                  .details:
@@ -394,7 +394,7 @@
                 TARGET
             <system_message backrefs="target-1" level="1" line="8" source="test data" type="INFO">
                 <paragraph>
-                    Duplicate implicit target name: "target".
+                    Target name overrides implicit target name "target".
             <paragraph>
                 Citation target.
         <footnote auto="1" dupnames="target" ids="target-2">

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.