Skip to content

Commit

Permalink
Revert "always fully resolve classname"
Browse files Browse the repository at this point in the history
This reverts commit 7720ed0.
  • Loading branch information
mvorisek committed Aug 18, 2023
1 parent 6df2ff9 commit c836c3d
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 107 deletions.
101 changes: 34 additions & 67 deletions sphinxcontrib/phpdomain.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,81 +218,48 @@ def handle_signature(self, sig, signode):
if m is None:
throw_if_false(signode, False, "Invalid signature")

visibility, modifiers, classname, name, arglist, retann, enumtype = m.groups()
visibility, modifiers, name_prefix, name, arglist, retann, enumtype = m.groups()

# parse & resolve classname and name
env_namespace = self.options.get(
if not name_prefix:
name_prefix = ""

# determine namespace and class name (if applicable), as well as full name
namespace = self.options.get(
"namespace", self.env.temp_data.get("php:namespace")
)
env_class = self.env.temp_data.get("php:class")
separator = separators[self.objtype]
if (
self.objtype == "const"
and not classname
and (not env_class or name.startswith(NS))
):
separator = None
type_in_class = separator != None

if not classname:
# throw_if_false(signode, not name.startswith('$'))
if name.startswith("$"):
name = name[1:]
if type_in_class:
throw_if_false(signode, env_class, "In-class type requires class")
classname = NS + env_class
else:
classname = name
name = None

if "::" in name_prefix:
classname = name_prefix.rstrip("::")
else:
throw_if_false(
signode, type_in_class, "Unexpected name in non in-class type"
)
throw_if_false(
signode,
classname.endswith("::"),
"Separator between class and name is required",
)
classname = classname[:-2]
# throw_if_false(signode, name.startswith('$') == (separator and separator.endswith('$'))) # not strictly needed
if name.startswith("$"):
name = name[1:]
classname = self.env.temp_data.get("php:class")

if self.objtype == "global":
name = "$" + classname
namespace = None
classname = None
elif classname.startswith(NS):
classname = classname[1:]
elif env_namespace:
classname = env_namespace + NS + classname

if not type_in_class and self.objtype != "global":
name = classname.split(NS)[-1]
classname = ""
elif classname and env_namespace and classname.startswith(env_namespace + NS):
classname = classname[len(env_namespace + NS) :]

if not classname:
fullname = name
elif not name:
fullname = classname
else:
fullname = classname + separator + name

name_prefix = classname
if not name_prefix:
name_prefix = None
# elif type_in_class and not self.env.temp_data['php:in_class']:
elif type_in_class:
if not self.env.temp_data.get("php:in_class", False):
name_prefix = name_prefix + separator
if name_prefix:
fullname = name_prefix + name

# Currently in a class, but not creating another class,
elif classname and not self.objtype in [
"class",
"exception",
"interface",
"trait",
"enum",
"function",
]:
if not self.env.temp_data["php:in_class"]:
name_prefix = classname + separator

fullname = classname + separator + name
else:
name_prefix = None

print([env_namespace, classname, name, fullname, name_prefix])
print()
classname = ""
fullname = name

signode["namespace"] = env_namespace
signode["namespace"] = namespace
signode["class"] = self.class_name = classname
signode["fullname"] = fullname

Expand All @@ -308,16 +275,16 @@ def handle_signature(self, sig, signode):
signode += addnodes.desc_annotation(sig_prefix, sig_prefix)

if name_prefix:
if env_namespace and not self.env.temp_data["php:in_class"]:
name_prefix = env_namespace + NS + name_prefix
if namespace and not self.env.temp_data["php:in_class"]:
name_prefix = namespace + NS + name_prefix
signode += addnodes.desc_addname(name_prefix, name_prefix)

elif (
env_namespace
namespace
and not self.env.temp_data.get("php:in_class", False)
and self.env.config.add_module_names
):
nodetext = env_namespace + NS
nodetext = namespace + NS
signode += addnodes.desc_addname(nodetext, nodetext)

signode += addnodes.desc_name(name, name)
Expand Down
22 changes: 0 additions & 22 deletions test/log.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,6 @@
<section id="invalid-domain-type">
<h1>Invalid domain type<a class="headerlink" href="#invalid-domain-type" title="Link to this heading">&#xB6;</a></h1>
</section>
<section id="in-class-type-without-class">
<h1>In-class type without class<a class="headerlink" href="#in-class-type-without-class" title="Permalink to this heading">&#xB6;</a></h1>
<dl class="php method">
<dt class="sig sig-object php">
<span class="sig-name descname">
<span class="pre">x()</span>
</span>
</dt>
<dd/>
</dl>
</section>
<section id="not-in-class-type-with-class">
<h1>Not In-class type with class<a class="headerlink" href="#not-in-class-type-with-class" title="Permalink to this heading">&#xB6;</a></h1>
<dl class="php class">
<dt class="sig sig-object php">
<span class="sig-name descname">
<span class="pre">A::A</span>
</span>
</dt>
<dd/>
</dl>
</section>
<section id="invalid-signature">
<h1>Invalid signature<a class="headerlink" href="#invalid-signature" title="Link to this heading">&#xB6;</a></h1>
<dl class="php method">
Expand Down
10 changes: 0 additions & 10 deletions test/log.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,6 @@
:::{php:namespacee} Foo
:::

# In-class type without class

:::{php:method} x()
:::

# Not In-class type with class

:::{php:class} A::A
:::

# Invalid signature

:::{php:method} x();
Expand Down
13 changes: 5 additions & 8 deletions test/log.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
test/log.md:3: WARNING: Unknown directive type: 'php:namespacee' [myst.directive_unknown]
test/log.md:8: WARNING: [phpdomain] In-class type requires class
test/log.md:13: WARNING: [phpdomain] Unexpected name in non in-class type
test/log.md:18: WARNING: [phpdomain] Invalid signature
test/log.md:23: [phpdomain] Target Foo\Aa not found
test/log.md:25: [phpdomain] Target Foo\A::simplifyy not found
test/log.md:30: [phpdomain] Target Foo\Foo\A::simplify not found - did you mean to write A::simplify?
test/log.md:35: [phpdomain] Target Fooo\Foo\A::simplify not found - did you mean to write \Foo\A::simplify?
test/ns.md:59: [phpdomain] Target A::simplify not found
test/log.md:8: WARNING: [phpdomain] Invalid signature
test/log.md:13: [phpdomain] Target Foo\Aa not found
test/log.md:15: [phpdomain] Target Foo\A::simplifyy not found
test/log.md:20: [phpdomain] Target Foo\Foo\A::simplify not found - did you mean to write A::simplify?
test/log.md:25: [phpdomain] Target Fooo\Foo\A::simplify not found - did you mean to write \Foo\A::simplify?
test/ns.md:69: [phpdomain] Target A2::simplify not found
test/ns.md:74: [phpdomain] Target Bar2\A::simplify not found
test/rst_doc.md:506: [phpdomain] Target OtherLibrary\int|string|ReturnedClass|\LibraryName\SubPackage\SubpackageInterface|null not found
Expand Down
3 changes: 3 additions & 0 deletions test/rst_doc.html
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,9 @@ <h2>Namespaced elements<a class="headerlink" href="#namespace-LibraryName" title
<p>A class in a namespace</p>
<dl class="php method">
<dt class="sig sig-object php" id="LibraryName\LibraryClass::instanceMethod">
<span class="sig-prename descclassname">
<span class="pre">LibraryClass::</span>
</span>
<span class="sig-name descname">
<span class="pre">instanceMethod</span>
</span>
Expand Down

0 comments on commit c836c3d

Please sign in to comment.