phpstan
This commit is contained in:
parent
8219cd7686
commit
54e2ca21ec
16 changed files with 108 additions and 22 deletions
19
.github/workflows/tests.yml
vendored
19
.github/workflows/tests.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set Up Cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
vendor
|
||||
|
@ -35,12 +35,25 @@ jobs:
|
|||
- name: Format
|
||||
run: ./vendor/bin/php-cs-fixer fix && git diff --exit-code
|
||||
|
||||
static:
|
||||
name: Static Analysis
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 2
|
||||
- name: PHPStan
|
||||
uses: php-actions/phpstan@v3
|
||||
with:
|
||||
contfiguration: tests/phpstan.neon
|
||||
|
||||
test:
|
||||
name: PHP ${{ matrix.php }} / DB ${{ matrix.database }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php: ['8.1']
|
||||
php: ['8.1', '8.2']
|
||||
database: ['pgsql', 'mysql', 'sqlite']
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
@ -51,7 +64,7 @@ jobs:
|
|||
fetch-depth: 2
|
||||
|
||||
- name: Set Up Cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
vendor
|
||||
|
|
|
@ -58,7 +58,8 @@
|
|||
"require-dev" : {
|
||||
"phpunit/phpunit" : "^9.0",
|
||||
"friendsofphp/php-cs-fixer" : "^3.12",
|
||||
"scrutinizer/ocular": "dev-master"
|
||||
"scrutinizer/ocular": "dev-master",
|
||||
"phpstan/phpstan": "1.10.x-dev"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-memcache": "memcache caching",
|
||||
|
|
65
composer.lock
generated
65
composer.lock
generated
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "e7d482b23052d4e764a4f2c076865bc5",
|
||||
"content-hash": "d010608b1d82774bd3444615496f254f",
|
||||
"packages": [
|
||||
{
|
||||
"name": "bower-asset/jquery",
|
||||
|
@ -2264,6 +2264,66 @@
|
|||
},
|
||||
"time": "2023-01-29T14:41:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "1.10.x-dev",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "f9f7d4a0714c8356ebe3a14e328a0a6dc778d454"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/f9f7d4a0714c8356ebe3a14e328a0a6dc778d454",
|
||||
"reference": "f9f7d4a0714c8356ebe3a14e328a0a6dc778d454",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2|^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"phpstan/phpstan-shim": "*"
|
||||
},
|
||||
"default-branch": true,
|
||||
"bin": [
|
||||
"phpstan",
|
||||
"phpstan.phar"
|
||||
],
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "PHPStan - PHP Static Analysis Tool",
|
||||
"keywords": [
|
||||
"dev",
|
||||
"static analysis"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpstan/issues",
|
||||
"source": "https://github.com/phpstan/phpstan/tree/1.10.x"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/ondrejmirtes",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/phpstan",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-02-02T16:02:59+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
"version": "9.2.x-dev",
|
||||
|
@ -5483,7 +5543,8 @@
|
|||
"stability-flags": {
|
||||
"shish/gqla": 20,
|
||||
"naroga/redis-cache": 20,
|
||||
"scrutinizer/ocular": 20
|
||||
"scrutinizer/ocular": 20,
|
||||
"phpstan/phpstan": 20
|
||||
},
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
|
|
|
@ -70,7 +70,7 @@ class EventTracingCache implements CacheInterface
|
|||
public function getMultiple($keys, $default = null)
|
||||
{
|
||||
$this->tracer->begin("Cache Get Multiple");
|
||||
$val = $this->engine->getMultiple($values, $default);
|
||||
$val = $this->engine->getMultiple($keys, $default);
|
||||
$this->tracer->end();
|
||||
return $val;
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ function loadCache(?string $dsn): CacheInterface
|
|||
$hp = explode(":", $matches[2]);
|
||||
$memcache = new \Memcached();
|
||||
$memcache->addServer($hp[0], (int)$hp[1]);
|
||||
$c = new \Sabre\Cache\Memcached($memcached);
|
||||
$c = new \Sabre\Cache\Memcached($memcache);
|
||||
} elseif ($matches[1] == "apc") {
|
||||
$c = new \Sabre\Cache\Apcu();
|
||||
} elseif ($matches[1] == "redis") {
|
||||
|
|
|
@ -264,6 +264,7 @@ class DatabaseConfig extends BaseConfig
|
|||
private string $table_name;
|
||||
private ?string $sub_column;
|
||||
private ?string $sub_value;
|
||||
private string $cache_name;
|
||||
|
||||
public function __construct(
|
||||
Database $database,
|
||||
|
|
|
@ -233,7 +233,7 @@ abstract class ExtensionInfo
|
|||
return self::$all_info_by_class[$normal];
|
||||
} else {
|
||||
$infos = print_r(array_keys(self::$all_info_by_class), true);
|
||||
throw new ScoreException("$normal not found in {$infos}");
|
||||
throw new SCoreException("$normal not found in {$infos}");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -242,7 +242,7 @@ abstract class ExtensionInfo
|
|||
foreach (get_subclasses_of("Shimmie2\ExtensionInfo") as $class) {
|
||||
$extension_info = new $class();
|
||||
if (array_key_exists($extension_info->key, self::$all_info_by_key)) {
|
||||
throw new ScoreException("Extension Info $class with key $extension_info->key has already been loaded");
|
||||
throw new SCoreException("Extension Info $class with key $extension_info->key has already been loaded");
|
||||
}
|
||||
|
||||
self::$all_info_by_key[$extension_info->key] = $extension_info;
|
||||
|
|
|
@ -174,7 +174,7 @@ class Tag
|
|||
} // hard-code one bad case...
|
||||
|
||||
if (mb_strlen($tag, 'UTF-8') > 255) {
|
||||
throw new ScoreException("The tag below is longer than 255 characters, please use a shorter tag.\n$tag\n");
|
||||
throw new SCoreException("The tag below is longer than 255 characters, please use a shorter tag.\n$tag\n");
|
||||
}
|
||||
return $tag;
|
||||
}
|
||||
|
|
|
@ -9,9 +9,6 @@ namespace Shimmie2;
|
|||
* be included right at the very start of index.php and tests/bootstrap.php
|
||||
*/
|
||||
|
||||
use JetBrains\PhpStorm\NoReturn;
|
||||
|
||||
#[NoReturn]
|
||||
function die_nicely($title, $body, $code=0)
|
||||
{
|
||||
print("<!DOCTYPE html>
|
||||
|
|
|
@ -177,7 +177,7 @@ class User
|
|||
{
|
||||
global $database;
|
||||
if (User::by_name($name)) {
|
||||
throw new ScoreException("Desired username is already in use");
|
||||
throw new SCoreException("Desired username is already in use");
|
||||
}
|
||||
$old_name = $this->name;
|
||||
$this->name = $name;
|
||||
|
|
|
@ -573,6 +573,7 @@ class CommentList extends Extension
|
|||
'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? 'none',
|
||||
];
|
||||
|
||||
// @phpstan-ignore-next-line
|
||||
$akismet = new \Akismet(
|
||||
$_SERVER['SERVER_NAME'],
|
||||
$config->get_string('comment_wordpress_key'),
|
||||
|
|
|
@ -128,9 +128,9 @@ and of course start organising your images :-)
|
|||
}
|
||||
$wikiLink = make_link("wiki/$st");
|
||||
if (class_exists('Shimmie2\TagCategories')) {
|
||||
$this->tagcategories = new TagCategories();
|
||||
$tag_category_dict = $this->tagcategories->getKeyedDict();
|
||||
$st = $this->tagcategories->getTagHtml(html_escape($st), $tag_category_dict);
|
||||
$tagcategories = new TagCategories();
|
||||
$tag_category_dict = $tagcategories->getKeyedDict();
|
||||
$st = $tagcategories->getTagHtml(html_escape($st), $tag_category_dict);
|
||||
}
|
||||
$short_wiki_description = '<h2>'.$st.' <a href="'.$wikiLink.'"><sup>ⓘ</sup></a></h2>'.$short_wiki_description;
|
||||
$page->add_block(new Block(null, $short_wiki_description, "main", 0, "short-wiki-description"));
|
||||
|
|
|
@ -11,6 +11,8 @@ class TagList extends Extension
|
|||
/** @var TagListTheme */
|
||||
protected ?Themelet $theme;
|
||||
|
||||
private $tagcategories = null;
|
||||
|
||||
public function onInitExt(InitExtEvent $event)
|
||||
{
|
||||
global $config;
|
||||
|
|
|
@ -9,6 +9,7 @@ class TagListTheme extends Themelet
|
|||
public string $heading = "";
|
||||
public string $list = "";
|
||||
public ?string $navigation;
|
||||
private $tagcategories = null;
|
||||
|
||||
public function set_heading(string $text)
|
||||
{
|
||||
|
|
|
@ -32,9 +32,9 @@ class WikiTheme extends Themelet
|
|||
// see if title is a category'd tag
|
||||
$title_html = html_escape($wiki_page->title);
|
||||
if (class_exists('Shimmie2\TagCategories')) {
|
||||
$this->tagcategories = new TagCategories();
|
||||
$tag_category_dict = $this->tagcategories->getKeyedDict();
|
||||
$title_html = $this->tagcategories->getTagHtml($title_html, $tag_category_dict);
|
||||
$tagcategories = new TagCategories();
|
||||
$tag_category_dict = $tagcategories->getKeyedDict();
|
||||
$title_html = $tagcategories->getTagHtml($title_html, $tag_category_dict);
|
||||
}
|
||||
|
||||
if (!$wiki_page->exists) {
|
||||
|
|
9
tests/phpstan.neon
Normal file
9
tests/phpstan.neon
Normal file
|
@ -0,0 +1,9 @@
|
|||
parameters:
|
||||
level: 0
|
||||
paths:
|
||||
- ../core
|
||||
- ../ext
|
||||
- ../tests
|
||||
- ../themes/default
|
||||
ignoreErrors:
|
||||
- '#Attribute class GQLA\\Expose#'
|
|
@ -37,7 +37,7 @@ EOD
|
|||
$message_html = empty($main_text) ? "" : "<div class='space' id='message'>$main_text</div>";
|
||||
$counter_html = empty($counter_text) ? "" : "<div class='mdl-typography--text-center' id='counter'>$counter_text</div>";
|
||||
$contact_link = empty($contact_link) ? "" : "<br><a href='mailto:$contact_link'>Contact</a> -";
|
||||
$main_links_html = empty($main_links) ? "" : preg_replace('data-clink-sel="" ', '', preg_replace('/shm-clink/', 'mdl-navigation__link', $main_links));
|
||||
$main_links_html = empty($main_links) ? "" : preg_replace('/data-clink-sel="" /', '', preg_replace('/shm-clink/', 'mdl-navigation__link', $main_links));
|
||||
$search_html = "
|
||||
<div class='mdl-grid'>
|
||||
<div class='mdl-layout-spacer'></div>
|
||||
|
|
Reference in a new issue