Skip to content

Commit 416117a

Browse files
authored
phpactorgh-2755: carbon performance (phpactor#2768)
- Limit number of members that are rendered - Fix offset info to specify path for text document
1 parent 6e7c71d commit 416117a

File tree

10 files changed

+89
-17
lines changed

10 files changed

+89
-17
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Changelog
66
Improvements:
77

88
- Tolerate code action provider failures #2761 @dantleech
9+
- Limit number of methods that are documented on classes to improve
10+
completion/resolve performance for large classes #2768 @dantleech
911

1012
## 2024-11-05
1113

lib/Extension/LanguageServerCompletion/Tests/Integration/MarkdownObjectRendererTest.php

+18
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,24 @@ public function foobar(): void {}
193193
'class_reflection3.md',
194194
];
195195

196+
yield 'too many members' => [
197+
'',
198+
function (Reflector $reflector) {
199+
return $this->reflectClassesIn(
200+
$reflector,
201+
sprintf(
202+
'<?php class SomeClass { %s }',
203+
implode(' ', array_map(
204+
fn (int $number) => sprintf('public function fun%s():void{}', $number),
205+
range(1, 53),
206+
))
207+
),
208+
)->get('SomeClass');
209+
},
210+
'class_reflection_too_many_members.md',
211+
false,
212+
];
213+
196214
yield 'final class' => [
197215
'',
198216
function (Reflector $reflector) {
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class SomeClass {
2-
public function foobar(): void
32
public const FOOBAR = "bar";
43
public $foo;
4+
public function foobar(): void
55
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
class SomeClass {
2+
public function fun1(): void
3+
public function fun2(): void
4+
public function fun3(): void
5+
public function fun4(): void
6+
public function fun5(): void
7+
public function fun6(): void
8+
public function fun7(): void
9+
public function fun8(): void
10+
public function fun9(): void
11+
public function fun10(): void
12+
public function fun11(): void
13+
public function fun12(): void
14+
public function fun13(): void
15+
public function fun14(): void
16+
public function fun15(): void
17+
public function fun16(): void
18+
public function fun17(): void
19+
public function fun18(): void
20+
public function fun19(): void
21+
public function fun20(): void
22+
public function fun21(): void
23+
public function fun22(): void
24+
public function fun23(): void
25+
public function fun24(): void
26+
public function fun25(): void
27+
public function fun26(): void
28+
public function fun27(): void
29+
public function fun28(): void
30+
public function fun29(): void
31+
public function fun30(): void
32+
public function fun31(): void
33+
public function fun32(): void
34+
public function fun33(): void
35+
public function fun34(): void
36+
public function fun35(): void
37+
public function fun36(): void
38+
public function fun37(): void
39+
public function fun38(): void
40+
public function fun39(): void
41+
public function fun40(): void
42+
public function fun41(): void
43+
public function fun42(): void
44+
public function fun43(): void
45+
public function fun44(): void
46+
public function fun45(): void
47+
public function fun46(): void
48+
public function fun47(): void
49+
public function fun48(): void
50+
public function fun49(): void
51+
public function fun50(): void
52+
// and 3 more...
53+
}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
public function foo(Foobar ...$foo)
1+
public function foo(Foobar ...$foo)
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
public function foo(<missing> ...$foo)
1+
public function foo(<missing> ...$foo)

lib/Extension/WorseReflectionExtra/Application/OffsetInfo.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
use Phpactor\Extension\Core\Application\Helper\ClassFileNormalizer;
99
use Phpactor\Extension\Core\Application\Helper\FilesystemHelper;
1010
use Phpactor\WorseReflection\TypeUtil;
11+
use Symfony\Component\Filesystem\Path;
12+
use function Safe\getcwd;
1113

1214
final class OffsetInfo
1315
{
@@ -26,7 +28,7 @@ public function infoForOffset(string $sourcePath, int $offset, bool $showFrame =
2628
$result = $this->reflector->reflectOffset(
2729
TextDocumentBuilder::create(
2830
$this->filesystemHelper->contentsFromFileOrStdin($sourcePath)
29-
)->build(),
31+
)->uri(Path::makeAbsolute($sourcePath, getcwd()))->build(),
3032
ByteOffset::fromInt($offset)
3133
);
3234

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{# classes such as Carbon have 1k members and rendering documentation for each
2+
is both time consuming and pointless - limit number of displayed members to finite amount #}
3+
{% set members = object.byVisibilities(["public"]) %}
4+
{% for index, member in members|slice(0,50) -%}
5+
{{ ' ' ~ render(member) }}
6+
{% endfor -%}
7+
{% if members|length > 50 %}
8+
// and {{ members|length - 50 }} more...
9+
{% endif %}

templates/help/markdown/Phpactor/WorseReflection/Core/Reflection/ReflectionClass.twig

+1-9
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,5 @@
33
{% if object.interfaces.count %} implements {% for interface in object.interfaces -%}
44
{{ interface.name.short }}{% if not loop.last %}, {% endif %}
55
{%- endfor %}{% endif %} {
6-
{% for member in object.methods.byVisibilities(["public"]) -%}
7-
{{ ' ' ~ render(member) }}
8-
{% endfor -%}
9-
{% for member in object.constants.byVisibilities(["public"]) -%}
10-
{{ ' ' ~ render(member) }}
11-
{% endfor -%}
12-
{% for member in object.properties.byVisibilities(["public"]) -%}
13-
{{ ' ' ~ render(member) }}
14-
{% endfor -%}
6+
{{ render(object.members) -}}
157
}

test.php

-4
This file was deleted.

0 commit comments

Comments
 (0)