PY-76819 Show the link to "types.NoneType" when rendering None inside Optionals and elsewhere

GitOrigin-RevId: e5e76015202eb2e77e103197fd09c4ad26bf09a0
This commit is contained in:
Mikhail Golubev
2025-05-13 17:15:02 +03:00
committed by intellij-monorepo-bot
parent a2bacfa2ad
commit 1621c292e9
5 changed files with 9 additions and 21 deletions

View File

@@ -8,7 +8,6 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.python.PyNames;
import com.jetbrains.python.codeInsight.typing.PyTypingTypeProvider;
import com.jetbrains.python.highlighting.PyHighlighter;
import com.jetbrains.python.psi.LanguageLevel;
@@ -61,12 +60,6 @@ public abstract class PyTypeRenderer extends PyTypeVisitorExt<@NotNull HtmlChunk
return PyDocumentationLink.toPossibleClass(name, myAnchor, myTypeEvalContext);
}
@Override
protected @NotNull HtmlChunk toClass(@NotNull String qualifiedName, @Nls @NotNull String linkText, @Nullable TextAttributesKey style) {
final var result = PyDocumentationLink.toClass(qualifiedName, linkText);
return style != null ? styledSpan(result, style) : result;
}
@Override
protected @NotNull HtmlChunk styledExpression(@NotNull PyExpression expression) {
return highlightExpressionText(expression.getText(), expression);
@@ -169,10 +162,6 @@ public abstract class PyTypeRenderer extends PyTypeVisitorExt<@NotNull HtmlChunk
return escaped(name);
}
protected @NotNull HtmlChunk toClass(@NotNull String qualifiedName, @Nls @NotNull String linkText, @Nullable TextAttributesKey style) {
return HtmlChunk.raw(linkText);
}
protected @NotNull HtmlChunk styledExpression(@NotNull PyExpression expression) {
return HtmlChunk.raw(expression.getText());
}
@@ -299,8 +288,7 @@ public abstract class PyTypeRenderer extends PyTypeVisitorExt<@NotNull HtmlChunk
if (isBitwiseOrUnionAvailable()) {
result.append(render(ContainerUtil.find(type.getMembers(), t -> !isNoneType(t))));
result.append(styled(" | ", PyHighlighter.PY_OPERATION_SIGN));
// TODO make this rendering consistent with rendering on None as a PyClassType instance
result.append(toClass(PyNames.TYPE_NONE, "None", PyHighlighter.PY_KEYWORD)); //NON-NLS
result.append(render(ContainerUtil.find(type.getMembers(), t -> isNoneType(t)))); //NON-NLS
}
else {
result.append(escaped("Optional")); //NON-NLS

View File

@@ -1,4 +1,4 @@
<html><body><div class="bottom"><icon src="AllIcons.Nodes.Package"/>&nbsp;<code><a href="psi_element://#module#FunctionWrapping">FunctionWrapping</a></code></div><div class="definition"><pre><span style="color:#000080;font-weight:bold;">def </span><span style="color:#000000;">maybe_add_numbers</span><span style="">(</span><span style="color:#000000;">a</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#_typeshed.NoneType">None</a></span></span><span style="">,</span>
<span style="color:#000000;">b</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#_typeshed.NoneType">None</a></span></span><span style="">,</span>
<span style="color:#000000;">c</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#_typeshed.NoneType">None</a></span></span><span style="">,</span>
<span style="color:#000000;">d</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#_typeshed.NoneType">None</a></span></span><span style="">)</span> -&gt; <span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#_typeshed.NoneType">None</a></span></span></pre></div></body></html>
<html><body><div class="bottom"><icon src="AllIcons.Nodes.Package"/>&nbsp;<code><a href="psi_element://#module#FunctionWrapping">FunctionWrapping</a></code></div><div class="definition"><pre><span style="color:#000080;font-weight:bold;">def </span><span style="color:#000000;">maybe_add_numbers</span><span style="">(</span><span style="color:#000000;">a</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span><span style="">,</span>
<span style="color:#000000;">b</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span><span style="">,</span>
<span style="color:#000000;">c</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span><span style="">,</span>
<span style="color:#000000;">d</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span><span style="">)</span> -&gt; <span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span></pre></div></body></html>

View File

@@ -1 +1 @@
<span style="color:#000080;font-weight:bold;">def </span><span style="color:#000000;">ones</span><span style="">(</span><span style="color:#000000;">shape</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style=""> | </span>Iterable<span style="">[</span><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style="">]</span></span><span style="">,</span> <span style="color:#000000;">dtype</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#object">object</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#_typeshed.NoneType">None</a></span></span><span style=""> = </span><span style="color:#000080;font-weight:bold;">None</span><span style="">,</span> <span style="color:#000000;">order</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#str">str</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#_typeshed.NoneType">None</a></span></span><span style=""> = </span><span style="color:#008000;font-weight:bold;">&#39;C&#39;</span><span style="">)</span> -&gt; <span style="color:#000000;"><a href="psi_element://#typename#numpy.core.multiarray.ndarray">ndarray</a></span>
<span style="color:#000080;font-weight:bold;">def </span><span style="color:#000000;">ones</span><span style="">(</span><span style="color:#000000;">shape</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style=""> | </span>Iterable<span style="">[</span><span style="color:#000080;"><a href="psi_element://#typename#int">int</a></span><span style="">]</span></span><span style="">,</span> <span style="color:#000000;">dtype</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#object">object</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span><span style=""> = </span><span style="color:#000080;font-weight:bold;">None</span><span style="">,</span> <span style="color:#000000;">order</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#str">str</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span><span style=""> = </span><span style="color:#008000;font-weight:bold;">&#39;C&#39;</span><span style="">)</span> -&gt; <span style="color:#000000;"><a href="psi_element://#typename#numpy.core.multiarray.ndarray">ndarray</a></span>

View File

@@ -1,2 +1,2 @@
<html><body><div class="bottom"><icon src="AllIcons.Nodes.Package"/>&nbsp;<code><a href="psi_element://#module#OptionalAndUnionTypesContainingTypeVars">OptionalAndUnionTypesContainingTypeVars</a></code></div><div class="definition"><pre><span style="color:#000080;font-weight:bold;">def </span><span style="color:#000000;">f</span><span style="">(</span><span style="color:#000000;">x1</span><span style="">: </span><span style="color:#000000;">T<span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#_typeshed.NoneType">None</a></span></span><span style="">,</span>
<html><body><div class="bottom"><icon src="AllIcons.Nodes.Package"/>&nbsp;<code><a href="psi_element://#module#OptionalAndUnionTypesContainingTypeVars">OptionalAndUnionTypesContainingTypeVars</a></code></div><div class="definition"><pre><span style="color:#000080;font-weight:bold;">def </span><span style="color:#000000;">f</span><span style="">(</span><span style="color:#000000;">x1</span><span style="">: </span><span style="color:#000000;">T<span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span><span style="">,</span>
<span style="color:#000000;">x2</span><span style="">: </span><span style="color:#000000;">T<span style=""> | </span><span style="color:#000080;">tuple</span><span style="">[</span>Any<span style="">, </span>Any<span style="">]</span></span><span style="">)</span> -&gt; <span style="color:#000000;"><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span></pre></div></body></html>

View File

@@ -1,2 +1,2 @@
<html><body><div class="bottom"><icon src="AllIcons.Nodes.Package"/>&nbsp;<code><a href="psi_element://#module#OptionalParameterType">OptionalParameterType</a></code></div><div class="definition"><pre><span style="color:#000080;font-weight:bold;">def </span><span style="color:#000000;">open</span><span style="">(</span><span style="color:#000000;">encoding</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#str">str</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#_typeshed.NoneType">None</a></span></span><span style=""> = </span><span style="color:#000080;font-weight:bold;">None</span><span style="">,</span>
<span style="color:#000000;">errors</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#str">str</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#_typeshed.NoneType">None</a></span></span><span style=""> = </span><span style="color:#000080;font-weight:bold;">None</span><span style="">)</span> -&gt; <span style="color:#000000;"><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span></pre></div></body></html>
<html><body><div class="bottom"><icon src="AllIcons.Nodes.Package"/>&nbsp;<code><a href="psi_element://#module#OptionalParameterType">OptionalParameterType</a></code></div><div class="definition"><pre><span style="color:#000080;font-weight:bold;">def </span><span style="color:#000000;">open</span><span style="">(</span><span style="color:#000000;">encoding</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#str">str</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span><span style=""> = </span><span style="color:#000080;font-weight:bold;">None</span><span style="">,</span>
<span style="color:#000000;">errors</span><span style="">: </span><span style="color:#000000;"><span style="color:#000080;"><a href="psi_element://#typename#str">str</a></span><span style=""> | </span><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span><span style=""> = </span><span style="color:#000080;font-weight:bold;">None</span><span style="">)</span> -&gt; <span style="color:#000000;"><span style="color:#000080;font-weight:bold;"><a href="psi_element://#typename#types.NoneType">None</a></span></span></pre></div></body></html>