fixing more psalm complaints
This commit is contained in:
parent
7c9f012de4
commit
26b1143b4d
|
|
@ -1,4 +1,4 @@
|
|||
FROM composer:2 AS composer
|
||||
FROM composer:2.8 AS composer
|
||||
FROM debian:bullseye
|
||||
WORKDIR /usr/src/myapp
|
||||
|
||||
|
|
@ -38,7 +38,7 @@ RUN apt-get install -y \
|
|||
|
||||
COPY --from=composer /usr/bin/composer /usr/local/bin/composer
|
||||
|
||||
RUN echo ";grpc.enable_fork_support = 1" > $(php-config --ini-dir)/40-otel-dev.ini \
|
||||
RUN echo "grpc.enable_fork_support = 1" > $(php-config --ini-dir)/40-otel-dev.ini \
|
||||
&& echo "grpc.poll_strategy = epoll1" >> $(php-config --ini-dir)/40-otel-dev.ini \
|
||||
&& echo "zend.assertions = 1" >> $(php-config --ini-dir)/40-otel-dev.ini
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ $otelHandler = new class(LogLevel::INFO) extends AbstractProcessingHandler {
|
|||
{
|
||||
return (new LogRecord($record['message']))
|
||||
->setSeverityText($record->level->toPsrLogLevel())
|
||||
->setTimestamp((int) (microtime(true) * LogRecord::NANOS_PER_SECOND))
|
||||
->setTimestamp((int) (microtime(true) * (float) LogRecord::NANOS_PER_SECOND))
|
||||
->setObservedTimestamp((int) $record->datetime->format('U') * LogRecord::NANOS_PER_SECOND)
|
||||
->setSeverityNumber(Severity::fromPsr3($record->level->toPsrLogLevel()))
|
||||
->setAttributes($record->context + $record->extra);
|
||||
|
|
|
|||
|
|
@ -15,6 +15,9 @@ use OpenTelemetry\SDK\Trace\TracerProvider;
|
|||
|
||||
$filename = sys_get_temp_dir() . '/traces.jsonl';
|
||||
$file = fopen($filename, 'a');
|
||||
if ($file === false) {
|
||||
throw new \RuntimeException('Failed to open file for writing: ' . $filename);
|
||||
}
|
||||
$transport = (new StreamTransportFactory())->create($file, ContentTypes::NDJSON);
|
||||
$exporter = new SpanExporter($transport);
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
<directory name="./examples/traces/demo/"/>
|
||||
<directory name="tests/Unit/Config/SDK/Configuration/ExampleSdk"/>
|
||||
<directory name="tests/TraceContext/W3CTestService"/>
|
||||
<directory name="vendor"/>
|
||||
</ignoreFiles>
|
||||
</projectFiles>
|
||||
<plugins>
|
||||
|
|
@ -27,11 +28,6 @@
|
|||
<referencedClass name="GMP"/>
|
||||
</errorLevel>
|
||||
</UndefinedClass>
|
||||
<UndefinedFunction>
|
||||
<errorLevel type="suppress">
|
||||
<referencedFunction name="OpenTelemetry\Instrumentation\hook"/>
|
||||
</errorLevel>
|
||||
</UndefinedFunction>
|
||||
<UndefinedMethod>
|
||||
<errorLevel type="suppress">
|
||||
<referencedMethod name="Google\Protobuf\Internal\RepeatedField::offsetGet"/>
|
||||
|
|
@ -43,11 +39,6 @@
|
|||
<directory name="./examples"/>
|
||||
</errorLevel>
|
||||
</ArgumentTypeCoercion>
|
||||
<InvalidArgument>
|
||||
<errorLevel type="suppress">
|
||||
<directory name="src/Config/SDK/Configuration/Internal"/>
|
||||
</errorLevel>
|
||||
</InvalidArgument>
|
||||
<UndefinedInterfaceMethod>
|
||||
<errorLevel type="suppress">
|
||||
<directory name="src/Config/SDK/ComponentProvider"/>
|
||||
|
|
@ -57,34 +48,56 @@
|
|||
<PossiblyInvalidArgument>
|
||||
<errorLevel type="suppress">
|
||||
<directory name="src/Config/SDK/Configuration"/>
|
||||
<directory name="tests/Integration/Config"/>
|
||||
</errorLevel>
|
||||
</PossiblyInvalidArgument>
|
||||
<PossiblyNullReference>
|
||||
<errorLevel type="suppress">
|
||||
<directory name="src/Config/SDK/ComponentProvider"/>
|
||||
<directory name="tests/Integration/Config/ComponentProvider"/>
|
||||
</errorLevel>
|
||||
</PossiblyNullReference>
|
||||
<MoreSpecificImplementedParamType>
|
||||
<errorLevel type="suppress">
|
||||
<directory name="src/Config/SDK/ComponentProvider"/>
|
||||
<directory name="tests/Integration/Config/ComponentProvider"/>
|
||||
<directory name="tests"/>
|
||||
</errorLevel>
|
||||
</MoreSpecificImplementedParamType>
|
||||
<InvalidDocblock>
|
||||
<UndefinedMagicMethod>
|
||||
<errorLevel type="suppress">
|
||||
<directory name="src/Config/SDK/ComponentProvider"/>
|
||||
<referencedMethod name="Prophecy\Prophecy\ObjectProphecy::accepts"/>
|
||||
<referencedMethod name="Prophecy\Prophecy\ObjectProphecy::fields"/>
|
||||
</errorLevel>
|
||||
</InvalidDocblock>
|
||||
<NonInvariantDocblockPropertyType>
|
||||
</UndefinedMagicMethod>
|
||||
<PossiblyFalseArgument>
|
||||
<errorLevel type="suppress">
|
||||
<directory name="src/Config/SDK/Configuration/Internal"/>
|
||||
<directory name="tests"/>
|
||||
</errorLevel>
|
||||
</NonInvariantDocblockPropertyType>
|
||||
<NonInvariantPropertyType>
|
||||
</PossiblyFalseArgument>
|
||||
<PossiblyFalseOperand>
|
||||
<errorLevel type="suppress">
|
||||
<directory name="src/Config/SDK/Configuration/Internal"/>
|
||||
<directory name="examples/baggage"/>
|
||||
<file name="src/SDK/Metrics/MetricExporter/ConsoleMetricExporter.php"/>
|
||||
</errorLevel>
|
||||
</NonInvariantPropertyType>
|
||||
</PossiblyFalseOperand>
|
||||
<InvalidOperand>
|
||||
<errorLevel type="suppress">
|
||||
<directory name="tests"/>
|
||||
</errorLevel>
|
||||
</InvalidOperand>
|
||||
<FalsableReturnStatement>
|
||||
<errorLevel type="suppress">
|
||||
<directory name="src/API/Trace"/>
|
||||
</errorLevel>
|
||||
</FalsableReturnStatement>
|
||||
<PossiblyNullArgument>
|
||||
<errorLevel type="suppress">
|
||||
<file name="src/API/Instrumentation/CachedInstrumentation.php"/>
|
||||
</errorLevel>
|
||||
</PossiblyNullArgument>
|
||||
<InvalidNullableReturnType>
|
||||
<errorLevel type="suppress">
|
||||
<file name="src/API/Instrumentation/CachedInstrumentation.php"/>
|
||||
</errorLevel>
|
||||
</InvalidNullableReturnType>
|
||||
<NullableReturnStatement>
|
||||
<errorLevel type="suppress">
|
||||
<file name="src/API/Instrumentation/CachedInstrumentation.php"/>
|
||||
</errorLevel>
|
||||
</NullableReturnStatement>
|
||||
</issueHandlers>
|
||||
</psalm>
|
||||
|
|
|
|||
|
|
@ -48,6 +48,6 @@ final class SystemClock implements ClockInterface
|
|||
*/
|
||||
private static function calculateReferenceTime(float $wallClockMicroTime, int $upTime): int
|
||||
{
|
||||
return ((int) ($wallClockMicroTime * ClockInterface::NANOS_PER_SECOND)) - $upTime;
|
||||
return ((int) ($wallClockMicroTime * (float) ClockInterface::NANOS_PER_SECOND)) - $upTime;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ final class CachedInstrumentation
|
|||
|
||||
return $this->meters[$meterProvider] ??= $meterProvider->getMeter($this->name, $this->version, $this->schemaUrl, $this->attributes);
|
||||
}
|
||||
|
||||
public function logger(): LoggerInterface
|
||||
{
|
||||
$loggerProvider = Globals::loggerProvider();
|
||||
|
|
|
|||
|
|
@ -94,6 +94,9 @@ class TraceState implements TraceStateInterface
|
|||
foreach ([128, 0] as $threshold) {
|
||||
// Then entries SHOULD be removed starting from the end of tracestate.
|
||||
for ($value = end($traceState); $key = key($traceState);) {
|
||||
if ($value === false) {
|
||||
continue;
|
||||
}
|
||||
$entry = strlen($key) + 1 + strlen($value);
|
||||
$value = prev($traceState);
|
||||
if ($entry <= $threshold) {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ use OpenTelemetry\Config\SDK\Configuration\Internal\ResourceCollection;
|
|||
use OpenTelemetry\Config\SDK\Configuration\Internal\TrackingEnvReader;
|
||||
use OpenTelemetry\Config\SDK\Configuration\Loader\YamlExtensionFileLoader;
|
||||
use OpenTelemetry\Config\SDK\Configuration\Loader\YamlSymfonyFileLoader;
|
||||
use RuntimeException;
|
||||
use function serialize;
|
||||
use function sprintf;
|
||||
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
|
||||
|
|
@ -107,7 +108,11 @@ final class ConfigurationFactory
|
|||
}
|
||||
|
||||
$loader = new ConfigurationLoader($resources);
|
||||
$locator = new FileLocator(getcwd());
|
||||
$cwd = getcwd();
|
||||
if ($cwd === false) {
|
||||
throw new RuntimeException('Current working directory could not be determined.');
|
||||
}
|
||||
$locator = new FileLocator($cwd);
|
||||
$fileLoader = new DelegatingLoader(new LoaderResolver([
|
||||
new YamlSymfonyFileLoader($loader, $locator),
|
||||
new YamlExtensionFileLoader($loader, $locator),
|
||||
|
|
|
|||
|
|
@ -32,6 +32,9 @@ final class FiberBoundContextStorage implements ContextStorageInterface, Context
|
|||
return $this->heads[Fiber::getCurrent() ?? $this] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-suppress PossiblyNullPropertyFetch
|
||||
*/
|
||||
#[\Override]
|
||||
public function scope(): ?ContextStorageScopeInterface
|
||||
{
|
||||
|
|
@ -62,6 +65,9 @@ final class FiberBoundContextStorage implements ContextStorageInterface, Context
|
|||
return $head->node->context ?? Context::getRoot();
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-suppress PossiblyNullArgument,PossiblyNullPropertyFetch
|
||||
*/
|
||||
#[\Override]
|
||||
public function attach(ContextInterface $context): ContextStorageScopeInterface
|
||||
{
|
||||
|
|
|
|||
|
|
@ -43,6 +43,9 @@ final class SanitizeCombinedHeadersPropagationGetter implements ExtendedPropagat
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-suppress PossiblyNullArgument
|
||||
*/
|
||||
#[\Override]
|
||||
public function getAll($carrier, string $key): array
|
||||
{
|
||||
|
|
|
|||
|
|
@ -33,6 +33,9 @@ final class ZendObserverFiber
|
|||
: (bool) $enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-suppress PossiblyNullReference,UndefinedMethod
|
||||
*/
|
||||
public static function init(): bool
|
||||
{
|
||||
static $fibers;
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ final class GrpcTransportFactory implements TransportFactoryInterface
|
|||
$opts,
|
||||
$method,
|
||||
$headers,
|
||||
(int) ($timeout * self::MILLIS_PER_SECOND),
|
||||
(int) ($timeout * (float) self::MILLIS_PER_SECOND),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -214,6 +214,9 @@ final class MetricConverter
|
|||
return $pHistogramDataPoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-suppress PossiblyFalseArgument
|
||||
*/
|
||||
private function convertExemplar(SDK\Metrics\Data\Exemplar $exemplar): Exemplar
|
||||
{
|
||||
$pExemplar = new Exemplar();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ use function json_encode;
|
|||
use const JSON_UNESCAPED_SLASHES;
|
||||
use const JSON_UNESCAPED_UNICODE;
|
||||
use function lcfirst;
|
||||
use OpenTelemetry\API\Behavior\LogsMessagesTrait;
|
||||
use OpenTelemetry\SDK\Common\Export\TransportInterface;
|
||||
use function property_exists;
|
||||
use function sprintf;
|
||||
|
|
@ -30,6 +31,7 @@ use function ucwords;
|
|||
*/
|
||||
final class ProtobufSerializer
|
||||
{
|
||||
use LogsMessagesTrait;
|
||||
private function __construct(private readonly string $contentType)
|
||||
{
|
||||
}
|
||||
|
|
@ -121,7 +123,14 @@ final class ProtobufSerializer
|
|||
unset($payload);
|
||||
self::traverseDescriptor($data, $desc);
|
||||
|
||||
return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
||||
$encoded = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
||||
if ($encoded === false) {
|
||||
self::logWarning('Failed to encode protobuf to JSON: ' . json_last_error_msg());
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
return $encoded;
|
||||
}
|
||||
|
||||
private static function traverseDescriptor(object $data, Descriptor $desc): void
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ final class PsrTransport implements TransportInterface
|
|||
|
||||
$delay = PsrUtils::retryDelay($retries, $this->retryDelay, $response);
|
||||
$sec = (int) $delay;
|
||||
$nsec = (int) (($delay - $sec) * 1e9);
|
||||
$nsec = (int) (($delay - (float) $sec) * 1e9);
|
||||
|
||||
/** @psalm-suppress ArgumentTypeCoercion */
|
||||
if (time_nanosleep($sec, $nsec) !== true) {
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ final class StreamTransport implements TransportInterface
|
|||
}
|
||||
|
||||
if ($bytesWritten !== strlen($payload)) {
|
||||
return new ErrorFuture(new RuntimeException(sprintf('Write failure, wrote %d of %d bytes', $bytesWritten, strlen($payload))));
|
||||
return new ErrorFuture(new RuntimeException(sprintf('Write failure, wrote %d of %d bytes', $bytesWritten ?: 0, strlen($payload))));
|
||||
}
|
||||
|
||||
return new CompletedFuture(null);
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@ final class StreamTransportFactory implements TransportFactoryInterface
|
|||
*
|
||||
* @psalm-template CONTENT_TYPE of string
|
||||
* @psalm-param CONTENT_TYPE $contentType
|
||||
* @psalm-return TransportInterface<CONTENT_TYPE>
|
||||
* @throws ErrorException
|
||||
* @psalm-return TransportInterface<CONTENT_TYPE>
|
||||
*/
|
||||
#[\Override]
|
||||
public function create(
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ final class Configurator
|
|||
|
||||
/**
|
||||
* @return T
|
||||
* @psalm-suppress PossiblyNullArgument
|
||||
*/
|
||||
public function resolve(InstrumentationScopeInterface $instrumentationScope): Config
|
||||
{
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ final class ShutdownHandler
|
|||
* @param callable $shutdownFunction function to register
|
||||
*
|
||||
* @see register_shutdown_function
|
||||
* @psalm-suppress PossiblyNullArgument,PossiblyNullPropertyFetch
|
||||
*/
|
||||
public static function register(callable $shutdownFunction): void
|
||||
{
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ function weaken(Closure $closure, ?object &$target = null): Closure
|
|||
$ref = WeakReference::create($target);
|
||||
|
||||
/**
|
||||
* @psalm-suppress all
|
||||
* @psalm-suppress PossiblyNullReference,PossiblyNullFunctionCall
|
||||
*/
|
||||
return $scope && $target::class === $scope->name && !$scope->isInternal()
|
||||
? static fn (...$args) => ($obj = $ref->get()) ? $closure->call($obj, ...$args) : null
|
||||
|
|
|
|||
|
|
@ -4,9 +4,11 @@ declare(strict_types=1);
|
|||
|
||||
namespace OpenTelemetry\SDK\Logs\Exporter;
|
||||
|
||||
use OpenTelemetry\API\Behavior\LogsMessagesTrait;
|
||||
use OpenTelemetry\SDK\Common\Export\TransportInterface;
|
||||
use OpenTelemetry\SDK\Common\Future\CancellationInterface;
|
||||
use OpenTelemetry\SDK\Common\Future\CompletedFuture;
|
||||
use OpenTelemetry\SDK\Common\Future\ErrorFuture;
|
||||
use OpenTelemetry\SDK\Common\Future\FutureInterface;
|
||||
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeInterface;
|
||||
use OpenTelemetry\SDK\Logs\LogRecordExporterInterface;
|
||||
|
|
@ -45,7 +47,13 @@ class ConsoleExporter implements LogRecordExporterInterface
|
|||
'resource' => $resource,
|
||||
'scopes' => array_values($scopes),
|
||||
];
|
||||
$this->transport->send(json_encode($output, JSON_PRETTY_PRINT));
|
||||
$payload = json_encode($output, JSON_PRETTY_PRINT);
|
||||
if ($payload === false) {
|
||||
return new ErrorFuture(
|
||||
new \RuntimeException('Failed to encode log records to JSON: ' . json_last_error_msg())
|
||||
););
|
||||
}
|
||||
$this->transport->send($payload);
|
||||
|
||||
return new CompletedFuture(true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ class ReadableLogRecord extends LogRecord
|
|||
parent::__construct($logRecord->body);
|
||||
$this->timestamp = $logRecord->timestamp;
|
||||
$this->observedTimestamp = $logRecord->observedTimestamp
|
||||
?? (int) (microtime(true) * LogRecord::NANOS_PER_SECOND);
|
||||
?? (int) (microtime(true) * (float) LogRecord::NANOS_PER_SECOND);
|
||||
$this->context = $logRecord->context;
|
||||
$context = $this->context ?? Context::getCurrent();
|
||||
$this->spanContext = Span::fromContext($context)->getContext();
|
||||
|
|
|
|||
|
|
@ -62,7 +62,9 @@ final class ExplicitBucketHistogramAggregation implements AggregationInterface
|
|||
public function merge($left, $right): ExplicitBucketHistogramSummary
|
||||
{
|
||||
$count = $left->count + $right->count;
|
||||
$sum = $left->sum + $right->sum;
|
||||
$sum = (is_int($left->sum) && is_int($right->sum))
|
||||
? ($left->sum + $right->sum)
|
||||
: ((float) $left->sum + (float) $right->sum);
|
||||
$min = self::min($left->min, $right->min);
|
||||
$max = self::max($left->max, $right->max);
|
||||
$buckets = $right->buckets;
|
||||
|
|
@ -87,7 +89,9 @@ final class ExplicitBucketHistogramAggregation implements AggregationInterface
|
|||
public function diff($left, $right): ExplicitBucketHistogramSummary
|
||||
{
|
||||
$count = -$left->count + $right->count;
|
||||
$sum = -$left->sum + $right->sum;
|
||||
$sum = (is_int($left->sum) && is_int($right->sum))
|
||||
? (-$left->sum + $right->sum)
|
||||
: (-(float) $left->sum + (float) $right->sum);
|
||||
$min = $left->min > $right->min ? $right->min : NAN;
|
||||
$max = $left->max < $right->max ? $right->max : NAN;
|
||||
$buckets = $right->buckets;
|
||||
|
|
|
|||
|
|
@ -40,11 +40,11 @@ final class SumAggregation implements AggregationInterface
|
|||
#[\Override]
|
||||
public function merge($left, $right): SumSummary
|
||||
{
|
||||
$sum = $left->value + $right->value;
|
||||
$sum = (is_int($left->value) && is_int($right->value))
|
||||
? ($left->value + $right->value)
|
||||
: ((float) $left->value + (float) $right->value);
|
||||
|
||||
return new SumSummary(
|
||||
$sum,
|
||||
);
|
||||
return new SumSummary($sum);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -54,11 +54,11 @@ final class SumAggregation implements AggregationInterface
|
|||
#[\Override]
|
||||
public function diff($left, $right): SumSummary
|
||||
{
|
||||
$sum = -$left->value + $right->value;
|
||||
$diff = (is_int($left->value) && is_int($right->value))
|
||||
? (-$left->value + $right->value)
|
||||
: (-(float) $left->value + (float) $right->value);
|
||||
|
||||
return new SumSummary(
|
||||
$sum,
|
||||
);
|
||||
return new SumSummary($diff);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -42,9 +42,9 @@ interface AggregationInterface
|
|||
|
||||
/**
|
||||
* @param array<AttributesInterface> $attributes
|
||||
* @psalm-param array<T> $summaries
|
||||
* @param array<list<Exemplar>> $exemplars
|
||||
* @param string|Temporality $temporality
|
||||
* @psalm-param array<T> $summaries
|
||||
*/
|
||||
public function toData(
|
||||
array $attributes,
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ final class AsynchronousInstruments
|
|||
/**
|
||||
* @param ArrayAccess<object, ObservableCallbackDestructor> $destructors
|
||||
* @param non-empty-list<Instrument> $instruments
|
||||
* @psalm-suppress PossiblyNullArgument,PossiblyNullPropertyAssignment,PossiblyNullPropertyFetch
|
||||
*/
|
||||
public static function observe(
|
||||
MetricWriterInterface $writer,
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ class TraceIdRatioBasedSampler implements SamplerInterface
|
|||
assert($precision >= 1);
|
||||
assert($wordSize >= 1 && ($wordSize & $wordSize - 1) === 0);
|
||||
|
||||
/** @psalm-suppress PossiblyInvalidArrayAccess */
|
||||
$b = unpack('J', pack('E', $probability))[1];
|
||||
$e = $b >> 52 & (1 << 11) - 1;
|
||||
$f = $b & (1 << 52) - 1 | ($e ? 1 << 52 : 0);
|
||||
|
|
|
|||
|
|
@ -53,8 +53,8 @@ final class Span extends API\Span implements ReadWriteSpanInterface
|
|||
* End users should use a {@see API\TracerInterface} in order to create spans.
|
||||
*
|
||||
* @param non-empty-string $name
|
||||
* @psalm-param API\SpanKind::KIND_* $kind
|
||||
* @param list<LinkInterface> $links
|
||||
* @psalm-param API\SpanKind::KIND_* $kind
|
||||
*
|
||||
* @internal
|
||||
* @psalm-internal OpenTelemetry
|
||||
|
|
|
|||
|
|
@ -831,8 +831,8 @@ class SpanTest extends MockeryTestCase
|
|||
}
|
||||
|
||||
/**
|
||||
* @psalm-param API\SpanKind::KIND_* $kind
|
||||
* @param list<LinkInterface> $links
|
||||
* @psalm-param API\SpanKind::KIND_* $kind
|
||||
*/
|
||||
private function createTestSpan(
|
||||
int $kind = API\SpanKind::KIND_INTERNAL,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"require-dev": {
|
||||
"vimeo/psalm": "^5.24",
|
||||
"vimeo/psalm": "^6",
|
||||
"psalm/plugin-mockery": "^1",
|
||||
"psalm/plugin-phpunit": "^0.18.4"
|
||||
"psalm/plugin-phpunit": "^0.19"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue