-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
request for additional configuration option for native_function_invocation #2739
Comments
Sounds like a good idea to me 👍 |
It was already discussed once with author of rule - @localheinz - as nice config option to have, but was postponed to undefined future. ref #2462 feel free to open a PR proposal. |
Is there an existing rule that'd be a good starting point to look at to trigger the insertion of use statements ? |
Instead of having this rule configurable, I would rather make new generic rule (that is executed after this, existing one) that would import all used classes from global namespaces (configurable to work with classes/functions/traits) +use Foo\Bar;
-$x = new \Foo\Bar();
+$x = new Bar(); |
@SignpostMarv I can't remind any |
import_absolute_references ? |
sth like this, name could always be adjusted during review, if one would figure out better name (now, I cant ;) ) |
I was poking around the php-cs-fixer source last night, thinking "no_absolute_references" under Also found something that may or may not be a bit of a problem - |
as it's suppose to import things, import namespace is ok |
wouldn't changing the priority on a bunch of other fixers be a problem for others ? |
priorities are to set relations between fixers, like fixer A has to be executed before fixer B. |
poking around in the code a bit more today, so I can probably figure out how to add new presumably we want to insert tokens on the line after one of
would appreciate help if I'm looking at the wrong example to figure things out from :D |
I would suggest to do it step by step. So here, without detecting what to import. After it is done, you could reuse it in new fixer like I would ignore:
then like you said, search for last existing imports, if it's not there go for namespace, if it's not there go for opening tag and skip following declare/docblock You have the right place to add things. Now you need to build tokens for things you want to import and Don't be shy to reach me over gitter if you have any questions ! |
* swapping phpcs for php-cs-fixer * workaround for php-cs-fixer treating parenthesis following echo as the function call variant * amending rules * blank_line_before_return * majority of files pass with these disabled, could remove later * combine_consecutive_unsets * concat_space * placeholder for if vimeo/psalm ever goes php:^7.0 * function_to_constant * disabling include * linebreak_after_opening_tag, lowercase_cast, magic_constant_casing * mb_str_functions disabled * method_separation * native_function_casing * native_function_invocations * new_with_braces disabled to match usage * no_alias_functions * no_blank_lines_after_class_opening * no_blank_lines_after_phpdoc * no_blank_lines_before_namespace * no_empty_comment * no_empty_phpdoc * no_empty_statement * no_extra_consecutive_blank_lines * no_leading_import_slash to discuss * no_leading_namespace_whitespace * no_mixed_echo_print * no_multiline_whitespace_around_double_arrow * no_multiline_whitespace_before_semicolons * no_php4_constructor * no_short_bool_cast * no_short_echo_tag * no_singleline_whitespace_before_semicolons * no_spaces_around_offset * no_trailing_comma_in_list_call * no_trailing_comma_in_singleline_array * no_unneeded_control_parentheses to discuss * no_unreachable_default_argument_value * no_unused_imports to discuss * no_useless_else to discuss * no_useless_return * no_whitespace_before_comma_in_array * no_whitespace_in_blank_line * non_printable_character * normalize_index_brace * ordered_class_elements to discuss * ordered_imports to discss * php_unit_construct * php_unit_dedicate_assert * php_unit_fqcn_annotation * php_unit_strict to discuss * php_unit_test_class_requires_covers to discuss * phpdoc_add_missing_param_annotation * phpdoc_align to discuss * phpdoc_annotation_without_dot to discuss * phpdoc_indent to discuss * phpdoc_inline_tag * phpdoc_no_access * phpdoc_no_alias_tag * phpdoc_no_empty_return * phpdoc_no_package * phpdoc_no_useless_inheritdoc * phpdoc_order to discuss * phpdoc_return_self_reference * phpdoc_scalar to discuss * phpdoc_separation to discuss * phpdoc_single_line_var_spacing * phpdoc_summary to discuss * phpdoc_to_comment to discuss * phpdoc_trim to discuss * phpdoc_types * phpdoc_var_without_name * pow_to_exponentiation * pre_increment to discuss * protected_to_private * psr0 turned off * psr4 turned on * random_api_migration * return_type_declaration to discuss * self_accessor to discuss * semicolon_after_instruction * short_scalar_cast * silenced_deprecation_error turned off * simplified_null_return to discuss * single_quote * space_after_semicolon * standardize_not_equals * strict_comparison to discuss * strict_param to discuss * ternary_operator_spaces * ternary_to_null_coalescing should be set to true if vimeo/psalm ever goes php:^7.0 * trailing_comma_in_multiline_array to discuss * trim_array_spaces * unary_operator_spaces * whitespace_after_comma_in_array to discuss * multi-version scrutinizer to match travis * binary_operator_space * not the best solution, but it works to exclude the call map from php-cs-fixer * reducing verbosity of config where defaults were used * dry run php-cs-fixer as part of tests * disabling rule pending PHP-CS-Fixer/PHP-CS-Fixer#2739 * enabling no_unused_imports * enabling ordered_imports * ignoring user-defined .php_cs * using $TRAVIS_COMMIT_RANGE to only test modified files * enabling no_leading_import_slash * conditionally testing everything * filter output then perform exact match * restoring phpcs via partial cherry pick of f65c618
This would really be nice as an option to the
|
This PR was squashed before being merged into the 2.16-dev branch (closes #4355). Discussion ---------- GlobalNamespaceImportFixer - Introduction * closes #1309 * refs #2166 (this pr does not differientiate between native/non-native elements, only between global/non-global) * closes #2739 * closes #4347 --- The fixer can import global classes/functions/constants: Input: ```php <?php namespace Foo; if (\count($x)) { /** @var \DateTimeImmutable $d */ $d = new \DateTimeImmutable(); $p = \M_PI; } ``` Output: ```php <?php namespace Foo; use DateTimeImmutable; use function count; use const M_PI; if (count($x)) { /** @var DateTimeImmutable $d */ $d = new DateTimeImmutable(); $p = M_PI; } ``` Global functions/constants without leading `\` are not imported. The slash can be added by `Native(Constant|Function)InvocationFixer` before. The fixer can also do the reverse fix, adding the backslash to imported global classes/functions/constants. But the fixer does not remove the imports, this can be done by `NoUnusedImportsFixer`. Commits ------- 41fe1f4 GlobalNamespaceImportFixer - Introduction
done in #4355 |
I've finally been getting around to using php-cs-fixer 2.x (not waiting around for #2553 to be resolved), and I ended up experimenting with it on vimeo/psalm#152, but some of the tests produce a rather verbose diff file ([nearly 7000 lines)(https://gist.github.com/SignpostMarv/840cac5070e7b5e840588b8e51903c18#file-native_function_invocation-only-diff)).
The argument behind
native_function_invocation
is to speed up resolving, and most things that improve performance are good things, but having such large diffs in pull requests is probably a bad idea (for several reasons that I won't go into at the moment).So a thought occurred to me;
use function strtolower;
produces the same opcodes as\strtolower()
; see 3v4l.org: backslash vs. 3v4l.org: use function.Since
use function
has been available since 5.6, would it be possible to have a configuration option added tonative_function_invocation
to enable smaller diffs to be generated with the same performance improvement? i.e.:for convenience/those not wanting to click on 3val.org links:
The text was updated successfully, but these errors were encountered: