Added psalm configuration and refined source.
This commit is contained in:
1 parent
4013046e4f
commit
70de78b276
13 files changed
+81
-3
No files matched your search
@@ -54,5 +54,8 @@
|
|||||||
"js/tests"
|
"js/tests"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"psalm": "psalm --config=config/psalm.xml"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<psalm
|
||||||
|
totallyTyped="true"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns="https://getpsalm.org/schema/config"
|
||||||
|
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
|
||||||
|
>
|
||||||
|
<projectFiles>
|
||||||
|
<directory name="src"/>
|
||||||
|
<ignoreFiles>
|
||||||
|
<directory name="vendor"/>
|
||||||
|
<directory name="src/mustache/cache"/>
|
||||||
|
</ignoreFiles>
|
||||||
|
</projectFiles>
|
||||||
|
|
||||||
|
<issueHandlers>
|
||||||
|
<LessSpecificReturnType errorLevel="info"/>
|
||||||
|
<UndefinedFunction errorLevel="suppress"/>
|
||||||
|
<UndefinedClass>
|
||||||
|
<errorLevel type="suppress">
|
||||||
|
<referencedClass name="WP_Admin_Bar"/>
|
||||||
|
<referencedClass name="WP_Error"/>
|
||||||
|
<referencedClass name="WP_Hook"/>
|
||||||
|
</errorLevel>
|
||||||
|
</UndefinedClass>
|
||||||
|
<MixedArgument>
|
||||||
|
<errorLevel type="suppress">
|
||||||
|
<file name="src/Provider/Record_Provider.php" />
|
||||||
|
</errorLevel>
|
||||||
|
</MixedArgument>
|
||||||
|
</issueHandlers>
|
||||||
|
</psalm>
|
||||||
@@ -21,6 +21,7 @@ class Hybrid_Events implements Hook_Event_Config_Interface {
|
|||||||
return $events;
|
return $events;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @var string $prefix */
|
||||||
$prefix = hybrid_get_prefix();
|
$prefix = hybrid_get_prefix();
|
||||||
|
|
||||||
$events["{$prefix}_before_header"][10] = [
|
$events["{$prefix}_before_header"][10] = [
|
||||||
@@ -34,9 +35,11 @@ class Hybrid_Events implements Hook_Event_Config_Interface {
|
|||||||
'category' => 'theme',
|
'category' => 'theme',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/** @var array $sidebars */
|
||||||
$sidebars = get_theme_support( 'hybrid-core-sidebars' );
|
$sidebars = get_theme_support( 'hybrid-core-sidebars' );
|
||||||
|
|
||||||
if ( ! empty( $sidebars[0] ) ) {
|
if ( ! empty( $sidebars[0] ) ) {
|
||||||
|
/** @var string $sidebar */
|
||||||
foreach ( $sidebars[0] as $sidebar ) {
|
foreach ( $sidebars[0] as $sidebar ) {
|
||||||
|
|
||||||
$events["{$prefix}_before_{$sidebar}"][10] = [
|
$events["{$prefix}_before_{$sidebar}"][10] = [
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace Rarst\Laps\Formatter;
|
|||||||
*/
|
*/
|
||||||
class Backtrace_Formatter {
|
class Backtrace_Formatter {
|
||||||
|
|
||||||
/** @var array $skip String matches to omit. */
|
/** @var string[] $skip String matches to omit. */
|
||||||
protected static $skip = [
|
protected static $skip = [
|
||||||
'wp-blog-header.php',
|
'wp-blog-header.php',
|
||||||
'wp-load.php',
|
'wp-load.php',
|
||||||
@@ -74,9 +74,13 @@ class Backtrace_Formatter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
*
|
||||||
* @param string $item Backtrace item.
|
* @param string $item Backtrace item.
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
|
*
|
||||||
|
* @psalm-suppress PossiblyFalseOperand
|
||||||
|
* @psalm-suppress MixedInferredReturnType
|
||||||
*/
|
*/
|
||||||
protected function shorten_include( string $item ): string {
|
protected function shorten_include( string $item ): string {
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ class Toolbar_Manager {
|
|||||||
* Render interface and add to the toolbar.
|
* Render interface and add to the toolbar.
|
||||||
*
|
*
|
||||||
* @param \WP_Admin_Bar $wp_admin_bar WordPress core toolbar object.
|
* @param \WP_Admin_Bar $wp_admin_bar WordPress core toolbar object.
|
||||||
|
*
|
||||||
|
* @psalm-suppress MixedArgument
|
||||||
*/
|
*/
|
||||||
public function admin_bar_menu( \WP_Admin_Bar $wp_admin_bar ): void {
|
public function admin_bar_menu( \WP_Admin_Bar $wp_admin_bar ): void {
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ class Mustache_Cache_FrozenCache extends \Mustache_Cache_FilesystemCache {
|
|||||||
* @param string $value Value.
|
* @param string $value Value.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
|
*
|
||||||
|
* @psalm-suppress InvalidScalarArgument
|
||||||
*/
|
*/
|
||||||
public function cache( $key, $value ): void {
|
public function cache( $key, $value ): void {
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ class Plugin extends Container {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $values Configuration values to apply.
|
* @param array $values Configuration values to apply.
|
||||||
|
*
|
||||||
|
* @psalm-suppress MixedArgument
|
||||||
|
* @psalm-suppress MixedAssignment
|
||||||
*/
|
*/
|
||||||
public function __construct( array $values = [] ) {
|
public function __construct( array $values = [] ) {
|
||||||
|
|
||||||
@@ -60,6 +63,8 @@ class Plugin extends Container {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Start Stopwatch and timing plugin load immediately, then set up core events and needed hooks.
|
* Start Stopwatch and timing plugin load immediately, then set up core events and needed hooks.
|
||||||
|
*
|
||||||
|
* @psalm-suppress MixedAssignment
|
||||||
*/
|
*/
|
||||||
public function run(): void {
|
public function run(): void {
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ class Core_Load_Collector implements Record_Collector_Interface {
|
|||||||
|
|
||||||
$request_time = filter_var( $_SERVER['REQUEST_TIME_FLOAT'], FILTER_VALIDATE_FLOAT );
|
$request_time = filter_var( $_SERVER['REQUEST_TIME_FLOAT'], FILTER_VALIDATE_FLOAT );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var float $request_time
|
||||||
|
* @var float $timestart
|
||||||
|
*/
|
||||||
return [
|
return [
|
||||||
new Record( 'PHP Load', $request_time, $timestart - $request_time, '', 'php' ),
|
new Record( 'PHP Load', $request_time, $timestart - $request_time, '', 'php' ),
|
||||||
// TODO This includes network plugins on multisite, need conditional label if Laps is network–activated.
|
// TODO This includes network plugins on multisite, need conditional label if Laps is network–activated.
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class Hook_Record_Collector extends Stopwatch_Record_Collector {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Stopwatch $stopwatch Stopwatch instance.
|
* @param Stopwatch $stopwatch Stopwatch instance.
|
||||||
* @param array $event_configs Starts and stops configuration.
|
* @param Hook_Event_Config_Interface[] $event_configs Starts and stops configuration.
|
||||||
*/
|
*/
|
||||||
public function __construct( Stopwatch $stopwatch, array $event_configs ) {
|
public function __construct( Stopwatch $stopwatch, array $event_configs ) {
|
||||||
|
|
||||||
@@ -42,7 +42,12 @@ class Hook_Record_Collector extends Stopwatch_Record_Collector {
|
|||||||
|
|
||||||
$this->events = array_merge( $this->events, $stops );
|
$this->events = array_merge( $this->events, $stops );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string $hook_name
|
||||||
|
* @var array $data
|
||||||
|
*/
|
||||||
foreach ( $stops as $hook_name => $data ) {
|
foreach ( $stops as $hook_name => $data ) {
|
||||||
|
/** @var int $priority */
|
||||||
foreach ( array_keys( $data ) as $priority ) {
|
foreach ( array_keys( $data ) as $priority ) {
|
||||||
add_action( $hook_name, [ $this, 'tick' ], $priority );
|
add_action( $hook_name, [ $this, 'tick' ], $priority );
|
||||||
}
|
}
|
||||||
@@ -70,8 +75,14 @@ class Hook_Record_Collector extends Stopwatch_Record_Collector {
|
|||||||
|
|
||||||
global $wp_filter;
|
global $wp_filter;
|
||||||
|
|
||||||
|
/** @var string $filter_name */
|
||||||
$filter_name = current_filter();
|
$filter_name = current_filter();
|
||||||
|
/**
|
||||||
|
* @var \WP_Hook|array $filter_instance
|
||||||
|
* @var array<string,\WP_hook|array> $wp_filter
|
||||||
|
*/
|
||||||
$filter_instance = $wp_filter[ $filter_name ];
|
$filter_instance = $wp_filter[ $filter_name ];
|
||||||
|
/** @var int $priority */
|
||||||
$priority = $filter_instance instanceof \WP_Hook ? $filter_instance->current_priority() : key( $filter_instance );
|
$priority = $filter_instance instanceof \WP_Hook ? $filter_instance->current_priority() : key( $filter_instance );
|
||||||
|
|
||||||
// See https://core.trac.wordpress.org/ticket/41185 on broken priority, but more general sanity check.
|
// See https://core.trac.wordpress.org/ticket/41185 on broken priority, but more general sanity check.
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace Rarst\Laps\Record;
|
|||||||
*/
|
*/
|
||||||
class Recursive_Record_Iterator extends \ArrayIterator implements \RecursiveIterator {
|
class Recursive_Record_Iterator extends \ArrayIterator implements \RecursiveIterator {
|
||||||
|
|
||||||
/** @var array $children */
|
/** @var Record_Interface[] $children */
|
||||||
protected $children = [];
|
protected $children = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -34,12 +34,15 @@ class Sql_Record_Collector implements Record_Collector_Interface {
|
|||||||
* @param string $query SQL query.
|
* @param string $query SQL query.
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
|
*
|
||||||
|
* @psalm-suppress MixedPropertyFetch
|
||||||
*/
|
*/
|
||||||
public function query( $query ): string {
|
public function query( $query ): string {
|
||||||
|
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
if ( empty( $this->query_starts ) && ! empty( $wpdb->queries ) ) {
|
if ( empty( $this->query_starts ) && ! empty( $wpdb->queries ) ) {
|
||||||
|
/** @var array $wpdb->queries */
|
||||||
$this->query_starts[ count( $wpdb->queries ) ] = microtime( true );
|
$this->query_starts[ count( $wpdb->queries ) ] = microtime( true );
|
||||||
} else {
|
} else {
|
||||||
$this->query_starts[] = microtime( true );
|
$this->query_starts[] = microtime( true );
|
||||||
@@ -59,6 +62,7 @@ class Sql_Record_Collector implements Record_Collector_Interface {
|
|||||||
|
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
|
/** @var array $wpdb->queries */
|
||||||
return array_map( [ $this, 'transform' ], array_keys( $wpdb->queries ), $wpdb->queries );
|
return array_map( [ $this, 'transform' ], array_keys( $wpdb->queries ), $wpdb->queries );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,6 +79,7 @@ class Sql_Record_Collector implements Record_Collector_Interface {
|
|||||||
*
|
*
|
||||||
* @param int $key Query key in captured data.
|
* @param int $key Query key in captured data.
|
||||||
* @param array $query_data Array of captured query data.
|
* @param array $query_data Array of captured query data.
|
||||||
|
* @psalm-param array{0: string, 1: float, 2: string} $query_data
|
||||||
*
|
*
|
||||||
* @return Record
|
* @return Record
|
||||||
*/
|
*/
|
||||||
@@ -84,6 +89,7 @@ class Sql_Record_Collector implements Record_Collector_Interface {
|
|||||||
|
|
||||||
[ $sql, $duration, $caller ] = $query_data;
|
[ $sql, $duration, $caller ] = $query_data;
|
||||||
|
|
||||||
|
/** @var float $query_start */
|
||||||
$query_start = $this->query_starts[ $key ] ?? $last_query_end;
|
$query_start = $this->query_starts[ $key ] ?? $last_query_end;
|
||||||
$sql = trim( $sql );
|
$sql = trim( $sql );
|
||||||
$category = 'sql-read';
|
$category = 'sql-read';
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ class Stopwatch_Record_Collector implements Record_Collector_Interface {
|
|||||||
|
|
||||||
$events = $this->stopwatch->getSectionEvents( '__root__' );
|
$events = $this->stopwatch->getSectionEvents( '__root__' );
|
||||||
|
|
||||||
|
/** @var string $name */
|
||||||
foreach ( array_keys( $events ) as $name ) {
|
foreach ( array_keys( $events ) as $name ) {
|
||||||
if ( $this->stopwatch->isStarted( $name ) ) {
|
if ( $this->stopwatch->isStarted( $name ) ) {
|
||||||
unset( $events[ $name ] );
|
unset( $events[ $name ] );
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ namespace Rarst\Laps\Record;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Processes records into sets for display by template.
|
* Processes records into sets for display by template.
|
||||||
|
*
|
||||||
|
* @psalm-suppress PropertyNotSetInConstructor
|
||||||
*/
|
*/
|
||||||
class Timeline_Iterator implements \Iterator {
|
class Timeline_Iterator implements \Iterator {
|
||||||
|
|
||||||
@@ -22,6 +24,8 @@ class Timeline_Iterator implements \Iterator {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Recursive_Record_Iterator $iterator Record iterator.
|
* @param Recursive_Record_Iterator $iterator Record iterator.
|
||||||
|
*
|
||||||
|
* @psalm-suppress PossiblyFalsePropertyAssignmentValue
|
||||||
*/
|
*/
|
||||||
public function __construct( Recursive_Record_Iterator $iterator ) {
|
public function __construct( Recursive_Record_Iterator $iterator ) {
|
||||||
|
|
||||||
@@ -36,6 +40,7 @@ class Timeline_Iterator implements \Iterator {
|
|||||||
|
|
||||||
$data = [];
|
$data = [];
|
||||||
|
|
||||||
|
/** @var Record $record */
|
||||||
foreach ( $this->current as $record ) {
|
foreach ( $this->current as $record ) {
|
||||||
$data[] = $this->prepare( $record );
|
$data[] = $this->prepare( $record );
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user