mirror of
https://github.com/danog/psalm.git
synced 2024-11-26 12:24:49 +01:00
Move docs into subfolders
This commit is contained in:
parent
b13eaa20d2
commit
7a1a728cee
@ -14,7 +14,7 @@ It has a few features that go further than other similar tools:
|
||||
Psalm checks that all properties of a given object have values after the constructor is called.
|
||||
|
||||
- **Support for complicated array shapes**<br />
|
||||
Psalm has support for [object-like arrays](docblock_type_syntax.md#object-like-arrays), allowing you to specify types for all keys of an array if you so wish.
|
||||
Psalm has support for [object-like arrays](annotating_code/docblock_type_syntax.md#object-like-arrays), allowing you to specify types for all keys of an array if you so wish.
|
||||
|
||||
Psalm also has a few features to make it perform as well as possible on large codebases:
|
||||
|
||||
@ -48,22 +48,24 @@ There are two main inspirations for Psalm:
|
||||
## Index
|
||||
|
||||
- Running Psalm:
|
||||
- [Installation](installation.md)
|
||||
- [Configuration](configuration.md)
|
||||
- [Installation](running_psalm/installation.md)
|
||||
- [Configuration](running_psalm/configuration.md)
|
||||
- Plugins
|
||||
- [Using plugins](using_plugins.md)
|
||||
- [Authoring plugins](authoring_plugins.md)
|
||||
- [How Psalm represents types](plugins_type_system.md)
|
||||
- [Command line usage](running_psalm.md)
|
||||
- [IDE support](language_server.md)
|
||||
- [Using plugins](running_psalm/plugins/using_plugins.md)
|
||||
- [Authoring plugins](running_psalm/plugins/authoring_plugins.md)
|
||||
- [How Psalm represents types](running_psalm/plugins/plugins_type_system.md)
|
||||
- [Command line usage](running_psalm/command_line_usage.md)
|
||||
- [IDE support](running_psalm/language_server.md)
|
||||
- Handling errors:
|
||||
- [Dealing with code issues](dealing_with_code_issues.md)
|
||||
- [Issue Types](issues.md)
|
||||
- [Checking non-PHP files](checking_non_php_files.md)
|
||||
- [Dealing with code issues](running_psalm/dealing_with_code_issues.md)
|
||||
- [Issue Types](running_psalm/issues.md)
|
||||
- [Checking non-PHP files](running_psalm/checking_non_php_files.md)
|
||||
- Annotating code:
|
||||
- [Typing in Psalm](typing_in_psalm.md)
|
||||
- [Docblock Type Syntax](docblock_type_syntax.md)
|
||||
- [Supported Annotations](supported_annotations.md)
|
||||
- [Template Annotations](templated_annotations.md)
|
||||
- [Fixing code](fixing_code.md)
|
||||
- [Typing in Psalm](annotating_code/typing_in_psalm.md)
|
||||
- [Docblock Type Syntax](annotating_code/docblock_type_syntax.md)
|
||||
- [Supported Annotations](annotating_code/supported_annotations.md)
|
||||
- [Template Annotations](annotating_code/templated_annotations.md)
|
||||
- Manipulating code:
|
||||
- [Fixing code](manipulating_code/fixing_code.md)
|
||||
- [Refactoring code](manipulating_code/refactoring_code.md)
|
||||
|
||||
|
@ -35,7 +35,7 @@ class A {}
|
||||
function takesClassName(string $s) : void {}
|
||||
```
|
||||
|
||||
`takesClassName("A");` would trigger a `TypeCoercion` issue (or a `PossiblyInvalidArgument` issue if [`allowCoercionFromStringToClassConst`](configuration.md#coding-style) was set to `false` in your config), whereas `takesClassName(A::class)` is fine.
|
||||
`takesClassName("A");` would trigger a `TypeCoercion` issue (or a `PossiblyInvalidArgument` issue if [`allowCoercionFromStringToClassConst`](../running_psalm/configuration.md#coding-style) was set to `false` in your config), whereas `takesClassName(A::class)` is fine.
|
||||
|
||||
### Object types
|
||||
|
21
docs/manipulating_code/refactoring_code.md
Normal file
21
docs/manipulating_code/refactoring_code.md
Normal file
@ -0,0 +1,21 @@
|
||||
# Refactoring Code
|
||||
|
||||
Sometimes you want to make big changes to your codebase like moving methods or classes.
|
||||
|
||||
Psalm has a refactoring tool you can access with either `vendor/bin/psalm-refactor` or `vendor/bin/psalm --refactor`, followed by appropriate commands.
|
||||
|
||||
## Moving classes between namespaces
|
||||
|
||||
`vendor/bin/psalm-refactor --move "Ns1\Foo" --into "Ns2"` tells Psalm to move class `Ns1\Foo` into the namespace `Ns2`, so any reference to `Ns1\Foo` becomes `Ns2\Foo`).
|
||||
|
||||
## Moving and renaming classes
|
||||
|
||||
`vendor/bin/psalm-refactor --rename "Ns1\Foo" --to "Ns2\Bar\Baz"` tells Psalm to move class `Ns1\Foo` into the namespace `Ns2\Bar` and rename it to `Baz`, so any reference to `Ns1\Foo` becomes `Ns2\Bar\Baz`).
|
||||
|
||||
## Moving methods between classes
|
||||
|
||||
`vendor/bin/psalm-refactor --move "Ns1\Foo::bar" --into "Ns2\Baz"` tells Psalm to move a method named `bar` inside `Ns1\Foo` into the class `Ns2\Baz`, so any reference to `Ns1\Foo::bar` becomes `Ns2\Baz::bar`). Psalm currently allows you to move static methods between aribitrary classes, and instance methods into child classes of that instance.
|
||||
|
||||
## Moving and renaming methods
|
||||
|
||||
`vendor/bin/psalm-refactor --rename "Ns1\Foo::bar" --to "Ns2\Baz::bat"` tells Psalm to move method `Ns1\Foo::bar` into the class `Ns2\Baz` and rename it to `bat`, so any reference to `Ns1\Foo::bar` becomes `Ns2\Baz::bat`).
|
@ -103,7 +103,7 @@ Allows you to specify whether or not to use the typed iterator docblock format s
|
||||
allowCoercionFromStringToClassConst="[bool]"
|
||||
>
|
||||
```
|
||||
When `true`, strings can be coerced to [`class-string`](templated_annotations.md#param-class-stringt), with Psalm emitting a `TypeCoercion` issue. If disabled, that issue changes to a more serious one. Defaults to `false`.
|
||||
When `true`, strings can be coerced to [`class-string`](../annotating_code/templated_annotations.md#param-class-stringt), with Psalm emitting a `TypeCoercion` issue. If disabled, that issue changes to a more serious one. Defaults to `false`.
|
||||
|
||||
#### allowStringToStandInForClass
|
||||
|
||||
@ -243,7 +243,7 @@ Contains a list of all the directories that Psalm should inspect. You can also s
|
||||
Optional. A list of extensions to search over. See [Checking non-PHP files](checking_non_php_files.md) to understand how to extend this.
|
||||
|
||||
#### `<plugins>`
|
||||
Optional. A list of `<plugin filename="path_to_plugin.php" />` entries. See the [Plugins](using_plugins.md) section for more information.
|
||||
Optional. A list of `<plugin filename="path_to_plugin.php" />` entries. See the [Plugins](plugins/using_plugins.md) section for more information.
|
||||
|
||||
#### `<issueHandlers>`
|
||||
Optional. If you don't want Psalm to complain about every single issue it finds, the issueHandler tag allows you to configure that. [Dealing with code issues](dealing_with_code_issues.md) tells you more.
|
@ -36,7 +36,7 @@ Here are a couple of example plugins:
|
||||
- [PreventFloatAssignmentChecker](https://github.com/vimeo/psalm/blob/master/examples/plugins/PreventFloatAssignmentChecker.php) - prevents assignment to floats
|
||||
- [FunctionCasingChecker](https://github.com/vimeo/psalm/blob/master/examples/plugins/FunctionCasingChecker.php) - checks that your functions and methods are correctly-cased
|
||||
|
||||
To ensure your plugin runs when Psalm does, add it to your [config](configuration.md):
|
||||
To ensure your plugin runs when Psalm does, add it to your [config](../configuration.md):
|
||||
```xml
|
||||
<plugins>
|
||||
<plugin filename="src/plugins/SomePlugin.php" />
|
||||
@ -56,9 +56,9 @@ Understand how Psalm handles types by [reading this guide](plugins_type_system.m
|
||||
|
||||
## Handling custom plugin issues
|
||||
|
||||
Plugins may sometimes need to emit their own issues (i.e. not emit one of the [existing issues](issues.md)). If this is the case, they can emit an issue that extends `Psalm\Issue\PluginIssue`.
|
||||
Plugins may sometimes need to emit their own issues (i.e. not emit one of the [existing issues](../issues.md)). If this is the case, they can emit an issue that extends `Psalm\Issue\PluginIssue`.
|
||||
|
||||
To suppress a custom plugin issue in docblocks you can just use its issue name (e.g. `/** @psalm-suppress NoFloatAssignment */`, but to [suppress it in Psalm’s config](dealing_with_code_issues.md#config-suppression) you must use the pattern:
|
||||
To suppress a custom plugin issue in docblocks you can just use its issue name (e.g. `/** @psalm-suppress NoFloatAssignment */`, but to [suppress it in Psalm’s config](../dealing_with_code_issues.md#config-suppression) you must use the pattern:
|
||||
|
||||
```xml
|
||||
<PluginIssue name="NoFloatAssignment" errorLevel="suppress" />
|
@ -4,7 +4,7 @@ Psalm's type system represents the types of variables within a program using dif
|
||||
|
||||
## Union types
|
||||
|
||||
All type Psalm's type information you are likely to use will be wrapped in a [Union Type](docblock_type_syntax.md#union-types).
|
||||
All type Psalm's type information you are likely to use will be wrapped in a [Union Type](../annotating_code/docblock_type_syntax.md#union-types).
|
||||
|
||||
The `Union` class constructor takes an array of `Atomic` types, and can represent one or more of these types at a time. They correspond to a vertical bar in a doc comment.
|
||||
|
@ -199,8 +199,14 @@ foreach ($args as $arg) {
|
||||
$last_arg_parts = preg_split('/, ?/', $last_arg);
|
||||
|
||||
foreach ($last_arg_parts as $last_arg_part) {
|
||||
list(, $identifier_name) = explode('::', $last_arg_part);
|
||||
$to_refactor[$last_arg_part] = $arg . '::' . $identifier_name;
|
||||
if (strpos($last_arg_part, '::')) {
|
||||
list(, $identifier_name) = explode('::', $last_arg_part);
|
||||
$to_refactor[$last_arg_part] = $arg . '::' . $identifier_name;
|
||||
} else {
|
||||
$namespace_parts = explode('\\', $last_arg_part);
|
||||
$class_name = end($namespace_parts);
|
||||
$to_refactor[$last_arg_part] = $arg . '\\' . $class_name;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$to_refactor[$last_arg] = $arg;
|
||||
|
@ -16,7 +16,7 @@ class DocumentationTest extends TestCase
|
||||
*/
|
||||
private static function getCodeBlocksFromDocs()
|
||||
{
|
||||
$issue_file = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'docs' . DIRECTORY_SEPARATOR . 'issues.md';
|
||||
$issue_file = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'docs' . DIRECTORY_SEPARATOR . 'running_psalm' . DIRECTORY_SEPARATOR . 'issues.md';
|
||||
|
||||
if (!file_exists($issue_file)) {
|
||||
throw new \UnexpectedValueException('docs not found');
|
||||
|
Loading…
Reference in New Issue
Block a user