Skip to content

Commit

Permalink
Added Phan dev-dependency
Browse files Browse the repository at this point in the history
- Updated composer.json
- Created Phan configuration
- Updated UXML class
  • Loading branch information
josemmo committed Oct 3, 2020
1 parent e255c30 commit 4300213
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 1 deletion.
73 changes: 73 additions & 0 deletions .phan/config.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<?php
/**
* This configuration will be read and overlaid on top of the
* default configuration. Command-line arguments will be applied
* after this file is read.
*/
return [
// Supported values: `'5.6'`, `'7.0'`, `'7.1'`, `'7.2'`, `'7.3'`,
// `'7.4'`, `null`.
// If this is set to `null`,
// then Phan assumes the PHP version which is closest to the minor version
// of the php executable used to execute Phan.
//
// Note that the **only** effect of choosing `'5.6'` is to infer
// that functions removed in php 7.0 exist.
// (See `backward_compatibility_checks` for additional options)
// TODO: Set this.
'target_php_version' => null,

// A list of directories that should be parsed for class and
// method information. After excluding the directories
// defined in exclude_analysis_directory_list, the remaining
// files will be statically analyzed for errors.
//
// Thus, both first-party and third-party code being used by
// your application should be included in this list.
'directory_list' => [
'src'
],

// A regex used to match every file name that you want to
// exclude from parsing. Actual value will exclude every
// "test", "tests", "Test" and "Tests" folders found in
// "vendor/" directory.
'exclude_file_regex' => '@^vendor/.*/(tests?|Tests?)/@',

// A directory list that defines files that will be excluded
// from static analysis, but whose class and method
// information should be included.
//
// Generally, you'll want to include the directories for
// third-party code (such as "vendor/") in this list.
//
// n.b.: If you'd like to parse but not analyze 3rd
// party code, directories containing that code
// should be added to both the `directory_list`
// and `exclude_analysis_directory_list` arrays.
'exclude_analysis_directory_list' => [
'vendor/'
],

// Set to true in order to attempt to detect unused variables.
// `dead_code_detection` will also enable unused variable detection.
//
// This has a few known false positives, e.g. for loops or branches.
'unused_variable_detection' => true,

// If enabled, warn about throw statement where the exception types
// are not documented in the PHPDoc of functions, methods, and closures.
'warn_about_undocumented_throw_statements' => true,

// If enabled (and warn_about_undocumented_throw_statements is enabled),
// warn about function/closure/method calls that have (at)throws
// without the invoking method documenting that exception.
'warn_about_undocumented_exceptions_thrown_by_invoked_functions' => true,

// A list of plugin files to execute
// NOTE: values can be the base name without the extension for plugins bundled with Phan (E.g. 'AlwaysReturnPlugin')
// or relative/absolute paths to the plugin (Relative to the project root).
'plugins' => [
'PreferNamespaceUsePlugin',
]
];
3 changes: 3 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,8 @@
"require": {
"php": ">=7.1",
"lib-libxml": "*"
},
"require-dev": {
"phan/phan": "^3.0"
}
}
4 changes: 3 additions & 1 deletion src/UXML.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public static function load(string $xmlString): self {
* @param DOMDocument|null $doc Document instance
* @return self New instamce
*/
public static function newInstance(string $name, ?string $value=null, array $attrs=[], DOMDocument $doc=null) {
public static function newInstance(string $name, ?string $value=null, array $attrs=[], DOMDocument $doc=null): self {
$targetDoc = ($doc === null) ? new DOMDocument() : $doc;
$domElement = $targetDoc->createElement($name, $value);

Expand All @@ -57,6 +57,7 @@ public static function newInstance(string $name, ?string $value=null, array $att
/**
* Class constructor
* @param DOMElement $element DOM Element instance
* @suppress PhanUndeclaredProperty
*/
public function __construct(DOMElement $element) {
$this->element = $element;
Expand Down Expand Up @@ -114,6 +115,7 @@ public function getAll(string $xpath, ?int $limit=null): array {
$domNodes = $xpathInstance->query($xpath, $this->element);
foreach ($domNodes as $domNode) {
if (!$domNode instanceof DOMElement) continue;
// @phan-suppress-next-line PhanUndeclaredProperty
$res[] = $domNode->uxml ?? new self($domNode);
if (($limit !== null) && (--$limit <= 0)) break;
}
Expand Down

0 comments on commit 4300213

Please sign in to comment.