gulp-phug 1.3.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/README.md +26 -0
  2. package/index.js +38 -10
  3. package/package.json +4 -4
  4. package/support/bootstrap.php +6 -0
  5. package/support/composer.json +1 -1
  6. package/support/composer.lock +94 -179
  7. package/support/vendor/autoload.php +15 -0
  8. package/support/vendor/bin/phug +119 -0
  9. package/support/vendor/bin/var-dump-server +119 -0
  10. package/support/vendor/composer/ClassLoader.php +166 -32
  11. package/support/vendor/composer/InstalledVersions.php +387 -329
  12. package/support/vendor/composer/autoload_classmap.php +1 -5
  13. package/support/vendor/composer/autoload_files.php +2 -3
  14. package/support/vendor/composer/autoload_namespaces.php +1 -1
  15. package/support/vendor/composer/autoload_psr4.php +3 -4
  16. package/support/vendor/composer/autoload_real.php +12 -37
  17. package/support/vendor/composer/autoload_static.php +6 -17
  18. package/support/vendor/composer/installed.json +99 -186
  19. package/support/vendor/composer/installed.php +129 -151
  20. package/support/vendor/composer/platform_check.php +15 -4
  21. package/support/vendor/phug/phug/.github/workflows/coverage.yml +61 -0
  22. package/support/vendor/phug/phug/.github/workflows/multi-tester.yml +48 -0
  23. package/support/vendor/phug/phug/.github/workflows/split.yml +41 -0
  24. package/support/vendor/phug/phug/.github/workflows/style.yml +48 -0
  25. package/support/vendor/phug/phug/.github/workflows/tests.yml +48 -0
  26. package/support/vendor/phug/phug/.multi-tester.yml +47 -17
  27. package/support/vendor/phug/phug/composer.json +27 -18
  28. package/support/vendor/phug/phug/phpcs.xml +4 -0
  29. package/support/vendor/phug/phug/phpunit.xml +2 -0
  30. package/support/vendor/phug/phug/phug +1 -1
  31. package/support/vendor/phug/phug/release.php +8 -0
  32. package/support/vendor/phug/phug/src/Phug/Ast/Ast/Node.php +9 -3
  33. package/support/vendor/phug/phug/src/Phug/Ast/composer.json +2 -3
  34. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/AbstractNodeCompiler.php +4 -4
  35. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/Element/BlockElement.php +4 -4
  36. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/AssignmentListNodeCompiler.php +1 -1
  37. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/AssignmentNodeCompiler.php +10 -2
  38. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/AttributeListNodeCompiler.php +1 -1
  39. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/AttributeNodeCompiler.php +2 -1
  40. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/BlockNodeCompiler.php +3 -3
  41. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/CaseNodeCompiler.php +1 -1
  42. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/CodeNodeCompiler.php +2 -2
  43. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/CommentNodeCompiler.php +1 -1
  44. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/ConditionalNodeCompiler.php +1 -1
  45. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/DoNodeCompiler.php +1 -1
  46. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/DoctypeNodeCompiler.php +1 -1
  47. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/DocumentNodeCompiler.php +1 -1
  48. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/EachNodeCompiler.php +1 -1
  49. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/ElementNodeCompiler.php +7 -1
  50. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/ExpressionNodeCompiler.php +1 -1
  51. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/FilterNodeCompiler.php +1 -1
  52. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/ForNodeCompiler.php +1 -1
  53. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/ImportNodeCompiler.php +5 -5
  54. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/KeywordNodeCompiler.php +1 -1
  55. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/MixinCallNodeCompiler.php +1 -1
  56. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/MixinNodeCompiler.php +1 -1
  57. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/TextNodeCompiler.php +1 -1
  58. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/VariableNodeCompiler.php +1 -1
  59. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/WhenNodeCompiler.php +1 -1
  60. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/WhileNodeCompiler.php +1 -1
  61. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/YieldNodeCompiler.php +1 -1
  62. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompilerInterface.php +5 -5
  63. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler.php +2 -2
  64. package/support/vendor/phug/phug/src/Phug/Compiler/CompilerInterface.php +2 -2
  65. package/support/vendor/phug/phug/src/Phug/Compiler/composer.json +10 -7
  66. package/support/vendor/phug/phug/src/Phug/DependencyInjection/DependencyInjection.php +1 -1
  67. package/support/vendor/phug/phug/src/Phug/DependencyInjection/composer.json +3 -4
  68. package/support/vendor/phug/phug/src/Phug/Event/Event/ListenerQueue.php +3 -0
  69. package/support/vendor/phug/phug/src/Phug/Event/EventManagerTrait.php +1 -1
  70. package/support/vendor/phug/phug/src/Phug/Event/composer.json +2 -3
  71. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/AbstractElement.php +1 -1
  72. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/AbstractFormat.php +17 -14
  73. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/AssignmentContainerInterface.php +2 -1
  74. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/AbstractAssignmentContainerElement.php +11 -1
  75. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/AbstractMarkupElement.php +1 -1
  76. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/AbstractValueElement.php +3 -3
  77. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/AnonymousBlockElement.php +1 -1
  78. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/AssignmentElement.php +13 -8
  79. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/AttributeElement.php +7 -4
  80. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/CodeElement.php +5 -5
  81. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/KeywordElement.php +3 -3
  82. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/MarkupElement.php +13 -11
  83. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/MixinCallElement.php +2 -1
  84. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/MixinElement.php +2 -1
  85. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/VariableElement.php +5 -5
  86. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Event/FormatEvent.php +1 -1
  87. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Format/HtmlFormat.php +1 -1
  88. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Format/XhtmlFormat.php +1 -1
  89. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Format/XmlFormat.php +214 -21
  90. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/FormatInterface.php +1 -1
  91. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Partial/AssignmentHelpersTrait.php +7 -4
  92. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Partial/HandleVariable.php +4 -4
  93. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Partial/MagicAccessorTrait.php +1 -7
  94. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Partial/PatternTrait.php +1 -1
  95. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter.php +1 -1
  96. package/support/vendor/phug/phug/src/Phug/Formatter/composer.json +5 -6
  97. package/support/vendor/phug/phug/src/Phug/Invoker/Invoker.php +1 -1
  98. package/support/vendor/phug/phug/src/Phug/Invoker/composer.json +9 -6
  99. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/AbstractToken.php +1 -1
  100. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Partial/IndentStyleTrait.php +5 -5
  101. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/AssignmentScanner.php +8 -2
  102. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/AttributeScanner.php +24 -12
  103. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/ConditionalScanner.php +1 -1
  104. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/FilterScanner.php +6 -10
  105. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/IndentationScanner.php +2 -2
  106. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/KeywordScanner.php +1 -1
  107. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/MultilineScanner.php +6 -12
  108. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/Partial/TrailingOutdentHandlerTrait.php +26 -0
  109. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/TextScanner.php +3 -3
  110. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/State.php +9 -9
  111. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/TokenInterface.php +1 -1
  112. package/support/vendor/phug/phug/src/Phug/Lexer/composer.json +4 -5
  113. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Event/NodeEvent.php +3 -2
  114. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node/AssignmentNode.php +5 -1
  115. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node/AttributeNode.php +4 -1
  116. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node/ElementNode.php +5 -1
  117. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node/FilterNode.php +2 -1
  118. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node/MixinCallNode.php +5 -1
  119. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node/MixinNode.php +5 -1
  120. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node.php +5 -5
  121. package/support/vendor/phug/phug/src/Phug/Parser/Parser/State.php +4 -4
  122. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/AbstractTokenHandler.php +87 -0
  123. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/AssignmentTokenHandler.php +6 -21
  124. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/AttributeEndTokenHandler.php +5 -10
  125. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/AttributeStartTokenHandler.php +7 -23
  126. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/AttributeTokenHandler.php +21 -19
  127. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/AutoCloseTokenHandler.php +5 -17
  128. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/BlockTokenHandler.php +4 -10
  129. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/CaseTokenHandler.php +4 -10
  130. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/ClassTokenHandler.php +7 -34
  131. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/CodeTokenHandler.php +4 -10
  132. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/CommentTokenHandler.php +4 -10
  133. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/ConditionalTokenHandler.php +4 -10
  134. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/DoTokenHandler.php +4 -10
  135. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/DoctypeTokenHandler.php +4 -10
  136. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/EachTokenHandler.php +4 -10
  137. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/ExpansionTokenHandler.php +5 -11
  138. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/ExpressionTokenHandler.php +4 -10
  139. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/FilterTokenHandler.php +4 -10
  140. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/ForTokenHandler.php +4 -10
  141. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/IdTokenHandler.php +7 -33
  142. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/ImportTokenHandler.php +14 -20
  143. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/IndentTokenHandler.php +4 -10
  144. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/InterpolationEndTokenHandler.php +4 -10
  145. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/InterpolationStartTokenHandler.php +29 -30
  146. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/KeywordTokenHandler.php +4 -10
  147. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/MixinCallTokenHandler.php +4 -10
  148. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/MixinTokenHandler.php +4 -10
  149. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/NewLineTokenHandler.php +4 -10
  150. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/OutdentTokenHandler.php +4 -10
  151. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/Partial/StaticAttributeTrait.php +36 -0
  152. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/TagInterpolationEndTokenHandler.php +4 -10
  153. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/TagInterpolationStartTokenHandler.php +7 -10
  154. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/TagTokenHandler.php +6 -21
  155. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/TextTokenHandler.php +4 -10
  156. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/VariableTokenHandler.php +4 -10
  157. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/WhenTokenHandler.php +4 -10
  158. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/WhileTokenHandler.php +4 -10
  159. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/YieldTokenHandler.php +4 -10
  160. package/support/vendor/phug/phug/src/Phug/Parser/Parser.php +1 -1
  161. package/support/vendor/phug/phug/src/Phug/Parser/ParserException.php +1 -1
  162. package/support/vendor/phug/phug/src/Phug/Parser/composer.json +5 -6
  163. package/support/vendor/phug/phug/src/Phug/Phug/Phug/Cli.php +5 -5
  164. package/support/vendor/phug/phug/src/Phug/Phug/Phug/Partial/ExtensionsTrait.php +1 -1
  165. package/support/vendor/phug/phug/src/Phug/Phug/Phug/Partial/FacadeOptionsTrait.php +1 -1
  166. package/support/vendor/phug/phug/src/Phug/Phug/Phug/Partial/PluginEnablerTrait.php +1 -1
  167. package/support/vendor/phug/phug/src/Phug/Phug/Phug/Phug.php +14 -5
  168. package/support/vendor/phug/phug/src/Phug/Phug/composer.json +9 -6
  169. package/support/vendor/phug/phug/src/Phug/Reader/Reader.php +13 -13
  170. package/support/vendor/phug/phug/src/Phug/Reader/composer.json +6 -2
  171. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Adapter/FileAdapter.php +21 -4
  172. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Adapter/Stream/Template.php +5 -0
  173. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Adapter/StreamAdapter.php +1 -1
  174. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/CacheInterface.php +1 -1
  175. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Partial/AdapterTrait.php +1 -1
  176. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Partial/Debug/DebuggerTrait.php +56 -10
  177. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Partial/RendererOptionsTrait.php +1 -1
  178. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Profiler/Dump.php +1 -1
  179. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Profiler/LinkDump.php +2 -2
  180. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Profiler/ProfilerModule.php +1 -1
  181. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Task/TasksGroup.php +1 -1
  182. package/support/vendor/phug/phug/src/Phug/Renderer/composer.json +10 -6
  183. package/support/vendor/phug/phug/src/Phug/Util/CompatibilityUtil/TestCaseTyped.php +67 -0
  184. package/support/vendor/phug/phug/src/Phug/Util/CompatibilityUtil/TestCaseUntyped.php +67 -0
  185. package/support/vendor/phug/phug/src/Phug/Util/Util/AttributesInterface.php +16 -0
  186. package/support/vendor/phug/phug/src/Phug/Util/Util/AttributesOrderInterface.php +17 -0
  187. package/support/vendor/phug/phug/src/Phug/Util/Util/AttributesStorage.php +44 -0
  188. package/support/vendor/phug/phug/src/Phug/Util/Util/Collection.php +2 -0
  189. package/support/vendor/phug/phug/src/Phug/Util/Util/OrderableInterface.php +22 -0
  190. package/support/vendor/phug/phug/src/Phug/Util/Util/OrderedValue.php +25 -0
  191. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/AttributeTrait.php +2 -1
  192. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/AttributesOrderTrait.php +19 -0
  193. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/ModuleContainerTrait.php +3 -3
  194. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/OptionTrait.php +1 -1
  195. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/OrderTrait.php +27 -0
  196. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/StaticMemberTrait.php +1 -1
  197. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/ValueTrait.php +5 -3
  198. package/support/vendor/phug/phug/src/Phug/Util/Util/SandBox.php +2 -1
  199. package/support/vendor/phug/phug/src/Phug/Util/Util/TestCase.php +47 -4
  200. package/support/vendor/phug/phug/src/Phug/Util/composer.json +7 -8
  201. package/support/vendor/symfony/deprecation-contracts/CHANGELOG.md +5 -0
  202. package/support/vendor/symfony/{polyfill-php72 → deprecation-contracts}/LICENSE +1 -1
  203. package/support/vendor/symfony/deprecation-contracts/README.md +26 -0
  204. package/support/vendor/symfony/{polyfill-php72 → deprecation-contracts}/composer.json +9 -9
  205. package/support/vendor/symfony/deprecation-contracts/function.php +27 -0
  206. package/support/vendor/symfony/polyfill-mbstring/LICENSE +1 -1
  207. package/support/vendor/symfony/polyfill-mbstring/Mbstring.php +256 -57
  208. package/support/vendor/symfony/polyfill-mbstring/README.md +1 -1
  209. package/support/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +119 -0
  210. package/support/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1 -1
  211. package/support/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +102 -27
  212. package/support/vendor/symfony/polyfill-mbstring/bootstrap.php +33 -8
  213. package/support/vendor/symfony/polyfill-mbstring/bootstrap80.php +167 -0
  214. package/support/vendor/symfony/polyfill-mbstring/composer.json +5 -4
  215. package/support/vendor/symfony/var-dumper/CHANGELOG.md +63 -0
  216. package/support/vendor/symfony/var-dumper/Caster/AddressInfoCaster.php +82 -0
  217. package/support/vendor/symfony/var-dumper/Caster/AmqpCaster.php +12 -10
  218. package/support/vendor/symfony/var-dumper/Caster/ArgsStub.php +6 -7
  219. package/support/vendor/symfony/var-dumper/Caster/Caster.php +59 -31
  220. package/support/vendor/symfony/var-dumper/Caster/ClassStub.php +7 -9
  221. package/support/vendor/symfony/var-dumper/Caster/ConstStub.php +20 -4
  222. package/support/vendor/symfony/var-dumper/Caster/CurlCaster.php +31 -0
  223. package/support/vendor/symfony/var-dumper/Caster/CutArrayStub.php +1 -1
  224. package/support/vendor/symfony/var-dumper/Caster/CutStub.php +2 -2
  225. package/support/vendor/symfony/var-dumper/Caster/DOMCaster.php +61 -156
  226. package/support/vendor/symfony/var-dumper/Caster/DateCaster.php +27 -26
  227. package/support/vendor/symfony/var-dumper/Caster/DoctrineCaster.php +6 -4
  228. package/support/vendor/symfony/var-dumper/Caster/DsCaster.php +1 -1
  229. package/support/vendor/symfony/var-dumper/Caster/DsPairStub.php +1 -1
  230. package/support/vendor/symfony/var-dumper/Caster/EnumStub.php +4 -5
  231. package/support/vendor/symfony/var-dumper/Caster/ExceptionCaster.php +64 -49
  232. package/support/vendor/symfony/var-dumper/Caster/FFICaster.php +171 -0
  233. package/support/vendor/symfony/var-dumper/Caster/FiberCaster.php +43 -0
  234. package/support/vendor/symfony/var-dumper/Caster/FrameStub.php +6 -8
  235. package/support/vendor/symfony/var-dumper/Caster/GdCaster.php +30 -0
  236. package/support/vendor/symfony/var-dumper/Caster/GmpCaster.php +4 -2
  237. package/support/vendor/symfony/var-dumper/Caster/ImagineCaster.php +2 -0
  238. package/support/vendor/symfony/var-dumper/Caster/ImgStub.php +1 -1
  239. package/support/vendor/symfony/var-dumper/Caster/IntlCaster.php +10 -8
  240. package/support/vendor/symfony/var-dumper/Caster/LinkStub.php +14 -17
  241. package/support/vendor/symfony/var-dumper/Caster/MemcachedCaster.php +10 -8
  242. package/support/vendor/symfony/var-dumper/Caster/MysqliCaster.php +33 -0
  243. package/support/vendor/symfony/var-dumper/Caster/OpenSSLCaster.php +69 -0
  244. package/support/vendor/symfony/var-dumper/Caster/PdoCaster.php +8 -6
  245. package/support/vendor/symfony/var-dumper/Caster/PgSqlCaster.php +21 -19
  246. package/support/vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php +4 -2
  247. package/support/vendor/symfony/var-dumper/Caster/RdKafkaCaster.php +188 -0
  248. package/support/vendor/symfony/var-dumper/Caster/RedisCaster.php +31 -31
  249. package/support/vendor/symfony/var-dumper/Caster/ReflectionCaster.php +100 -44
  250. package/support/vendor/symfony/var-dumper/Caster/ResourceCaster.php +33 -46
  251. package/support/vendor/symfony/var-dumper/Caster/ScalarStub.php +27 -0
  252. package/support/vendor/symfony/var-dumper/Caster/SocketCaster.php +64 -0
  253. package/support/vendor/symfony/var-dumper/Caster/SplCaster.php +57 -44
  254. package/support/vendor/symfony/var-dumper/Caster/SqliteCaster.php +32 -0
  255. package/support/vendor/symfony/var-dumper/Caster/StubCaster.php +15 -5
  256. package/support/vendor/symfony/var-dumper/Caster/SymfonyCaster.php +66 -10
  257. package/support/vendor/symfony/var-dumper/Caster/TraceStub.php +7 -11
  258. package/support/vendor/symfony/var-dumper/Caster/UninitializedStub.php +25 -0
  259. package/support/vendor/symfony/var-dumper/Caster/UuidCaster.php +2 -0
  260. package/support/vendor/symfony/var-dumper/Caster/VirtualStub.php +21 -0
  261. package/support/vendor/symfony/var-dumper/Caster/XmlReaderCaster.php +25 -10
  262. package/support/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php +7 -5
  263. package/support/vendor/symfony/var-dumper/Cloner/AbstractCloner.php +103 -72
  264. package/support/vendor/symfony/var-dumper/Cloner/ClonerInterface.php +1 -5
  265. package/support/vendor/symfony/var-dumper/Cloner/Cursor.php +21 -21
  266. package/support/vendor/symfony/var-dumper/Cloner/Data.php +51 -77
  267. package/support/vendor/symfony/var-dumper/Cloner/DumperInterface.php +11 -14
  268. package/support/vendor/symfony/var-dumper/Cloner/Stub.php +40 -31
  269. package/support/vendor/symfony/var-dumper/Cloner/VarCloner.php +21 -104
  270. package/support/vendor/symfony/var-dumper/Command/Descriptor/CliDescriptor.php +9 -19
  271. package/support/vendor/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.php +10 -11
  272. package/support/vendor/symfony/var-dumper/Command/ServerDumpCommand.php +27 -15
  273. package/support/vendor/symfony/var-dumper/Dumper/AbstractDumper.php +68 -48
  274. package/support/vendor/symfony/var-dumper/Dumper/CliDumper.php +126 -113
  275. package/support/vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php +1 -1
  276. package/support/vendor/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php +0 -3
  277. package/support/vendor/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php +5 -6
  278. package/support/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php +10 -15
  279. package/support/vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php +8 -11
  280. package/support/vendor/symfony/var-dumper/Dumper/DataDumperInterface.php +3 -0
  281. package/support/vendor/symfony/var-dumper/Dumper/HtmlDumper.php +122 -146
  282. package/support/vendor/symfony/var-dumper/Dumper/ServerDumper.php +10 -10
  283. package/support/vendor/symfony/var-dumper/Exception/ThrowingCasterException.php +1 -1
  284. package/support/vendor/symfony/var-dumper/LICENSE +1 -1
  285. package/support/vendor/symfony/var-dumper/README.md +6 -6
  286. package/support/vendor/symfony/var-dumper/Resources/bin/var-dump-server +4 -0
  287. package/support/vendor/symfony/var-dumper/Resources/functions/dump.php +35 -10
  288. package/support/vendor/symfony/var-dumper/Server/Connection.php +16 -14
  289. package/support/vendor/symfony/var-dumper/Server/DumpServer.php +16 -14
  290. package/support/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php +9 -9
  291. package/support/vendor/symfony/var-dumper/VarDumper.php +69 -17
  292. package/support/vendor/symfony/var-dumper/composer.json +10 -16
  293. package/support/vendor/symfony/polyfill-php72/Php72.php +0 -217
  294. package/support/vendor/symfony/polyfill-php72/README.md +0 -28
  295. package/support/vendor/symfony/polyfill-php72/bootstrap.php +0 -57
  296. package/support/vendor/symfony/polyfill-php80/LICENSE +0 -19
  297. package/support/vendor/symfony/polyfill-php80/Php80.php +0 -105
  298. package/support/vendor/symfony/polyfill-php80/README.md +0 -24
  299. package/support/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +0 -22
  300. package/support/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +0 -11
  301. package/support/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +0 -5
  302. package/support/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +0 -5
  303. package/support/vendor/symfony/polyfill-php80/bootstrap.php +0 -42
  304. package/support/vendor/symfony/polyfill-php80/composer.json +0 -40
@@ -11,6 +11,7 @@
11
11
 
12
12
  namespace Symfony\Component\VarDumper\Dumper;
13
13
 
14
+ use Symfony\Component\ErrorHandler\ErrorRenderer\FileLinkFormatter;
14
15
  use Symfony\Component\VarDumper\Cloner\Cursor;
15
16
  use Symfony\Component\VarDumper\Cloner\Stub;
16
17
 
@@ -21,29 +22,31 @@ use Symfony\Component\VarDumper\Cloner\Stub;
21
22
  */
22
23
  class CliDumper extends AbstractDumper
23
24
  {
24
- public static $defaultColors;
25
+ public static bool $defaultColors;
26
+ /** @var callable|resource|string|null */
25
27
  public static $defaultOutput = 'php://stdout';
26
28
 
27
- protected $colors;
28
- protected $maxStringWidth = 0;
29
- protected $styles = [
29
+ protected bool $colors;
30
+ protected int $maxStringWidth = 0;
31
+ protected array $styles = [
30
32
  // See http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
31
33
  'default' => '0;38;5;208',
32
34
  'num' => '1;38;5;38',
33
35
  'const' => '1;38;5;208',
36
+ 'virtual' => '3',
34
37
  'str' => '1;38;5;113',
35
38
  'note' => '38;5;38',
36
39
  'ref' => '38;5;247',
37
- 'public' => '',
38
- 'protected' => '',
39
- 'private' => '',
40
+ 'public' => '39',
41
+ 'protected' => '39',
42
+ 'private' => '39',
40
43
  'meta' => '38;5;170',
41
44
  'key' => '38;5;113',
42
45
  'index' => '38;5;38',
43
46
  ];
44
47
 
45
- protected static $controlCharsRx = '/[\x00-\x1F\x7F]+/';
46
- protected static $controlCharsMap = [
48
+ protected static string $controlCharsRx = '/[\x00-\x1F\x7F]+/';
49
+ protected static array $controlCharsMap = [
47
50
  "\t" => '\t',
48
51
  "\n" => '\n',
49
52
  "\v" => '\v',
@@ -51,20 +54,18 @@ class CliDumper extends AbstractDumper
51
54
  "\r" => '\r',
52
55
  "\033" => '\e',
53
56
  ];
57
+ protected static string $unicodeCharsRx = "/[\u{00A0}\u{00AD}\u{034F}\u{061C}\u{115F}\u{1160}\u{17B4}\u{17B5}\u{180E}\u{2000}-\u{200F}\u{202F}\u{205F}\u{2060}-\u{2064}\u{206A}-\u{206F}\u{3000}\u{2800}\u{3164}\u{FEFF}\u{FFA0}\u{1D159}\u{1D173}-\u{1D17A}]/u";
54
58
 
55
- protected $collapseNextHash = false;
56
- protected $expandNextHash = false;
59
+ protected bool $collapseNextHash = false;
60
+ protected bool $expandNextHash = false;
57
61
 
58
- private $displayOptions = [
62
+ private array $displayOptions = [
59
63
  'fileLinkFormat' => null,
60
64
  ];
61
65
 
62
- private $handlesHrefGracefully;
66
+ private bool $handlesHrefGracefully;
63
67
 
64
- /**
65
- * {@inheritdoc}
66
- */
67
- public function __construct($output = null, string $charset = null, int $flags = 0)
68
+ public function __construct($output = null, ?string $charset = null, int $flags = 0)
68
69
  {
69
70
  parent::__construct($output, $charset, $flags);
70
71
 
@@ -83,27 +84,23 @@ class CliDumper extends AbstractDumper
83
84
  ]);
84
85
  }
85
86
 
86
- $this->displayOptions['fileLinkFormat'] = ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format') ?: 'file://%f#L%l';
87
+ $this->displayOptions['fileLinkFormat'] = class_exists(FileLinkFormatter::class) ? new FileLinkFormatter() : (\ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format') ?: 'file://%f#L%l');
87
88
  }
88
89
 
89
90
  /**
90
91
  * Enables/disables colored output.
91
- *
92
- * @param bool $colors
93
92
  */
94
- public function setColors($colors)
93
+ public function setColors(bool $colors): void
95
94
  {
96
- $this->colors = (bool) $colors;
95
+ $this->colors = $colors;
97
96
  }
98
97
 
99
98
  /**
100
99
  * Sets the maximum number of characters per line for dumped strings.
101
- *
102
- * @param int $maxStringWidth
103
100
  */
104
- public function setMaxStringWidth($maxStringWidth)
101
+ public function setMaxStringWidth(int $maxStringWidth): void
105
102
  {
106
- $this->maxStringWidth = (int) $maxStringWidth;
103
+ $this->maxStringWidth = $maxStringWidth;
107
104
  }
108
105
 
109
106
  /**
@@ -111,7 +108,7 @@ class CliDumper extends AbstractDumper
111
108
  *
112
109
  * @param array $styles A map of style names to style definitions
113
110
  */
114
- public function setStyles(array $styles)
111
+ public function setStyles(array $styles): void
115
112
  {
116
113
  $this->styles = $styles + $this->styles;
117
114
  }
@@ -121,17 +118,15 @@ class CliDumper extends AbstractDumper
121
118
  *
122
119
  * @param array $displayOptions A map of display options to customize the behavior
123
120
  */
124
- public function setDisplayOptions(array $displayOptions)
121
+ public function setDisplayOptions(array $displayOptions): void
125
122
  {
126
123
  $this->displayOptions = $displayOptions + $this->displayOptions;
127
124
  }
128
125
 
129
- /**
130
- * {@inheritdoc}
131
- */
132
- public function dumpScalar(Cursor $cursor, $type, $value)
126
+ public function dumpScalar(Cursor $cursor, string $type, string|int|float|bool|null $value): void
133
127
  {
134
128
  $this->dumpKey($cursor);
129
+ $this->collapseNextHash = $this->expandNextHash = false;
135
130
 
136
131
  $style = 'const';
137
132
  $attr = $cursor->attr;
@@ -141,24 +136,33 @@ class CliDumper extends AbstractDumper
141
136
  $style = 'default';
142
137
  break;
143
138
 
139
+ case 'label':
140
+ $this->styles += ['label' => $this->styles['default']];
141
+ $style = 'label';
142
+ break;
143
+
144
144
  case 'integer':
145
145
  $style = 'num';
146
+
147
+ if (isset($this->styles['integer'])) {
148
+ $style = 'integer';
149
+ }
150
+
146
151
  break;
147
152
 
148
153
  case 'double':
149
154
  $style = 'num';
150
155
 
151
- switch (true) {
152
- case \INF === $value: $value = 'INF'; break;
153
- case -\INF === $value: $value = '-INF'; break;
154
- case is_nan($value): $value = 'NAN'; break;
155
- default:
156
- $value = (string) $value;
157
- if (false === strpos($value, $this->decimalPoint)) {
158
- $value .= $this->decimalPoint.'0';
159
- }
160
- break;
156
+ if (isset($this->styles['float'])) {
157
+ $style = 'float';
161
158
  }
159
+
160
+ $value = match (true) {
161
+ \INF === $value => 'INF',
162
+ -\INF === $value => '-INF',
163
+ is_nan($value) => 'NAN',
164
+ default => !str_contains($value = (string) $value, $this->decimalPoint) ? $value .= $this->decimalPoint.'0' : $value,
165
+ };
162
166
  break;
163
167
 
164
168
  case 'NULL':
@@ -180,12 +184,10 @@ class CliDumper extends AbstractDumper
180
184
  $this->endValue($cursor);
181
185
  }
182
186
 
183
- /**
184
- * {@inheritdoc}
185
- */
186
- public function dumpString(Cursor $cursor, $str, $bin, $cut)
187
+ public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut): void
187
188
  {
188
189
  $this->dumpKey($cursor);
190
+ $this->collapseNextHash = $this->expandNextHash = false;
189
191
  $attr = $cursor->attr;
190
192
 
191
193
  if ($bin) {
@@ -193,13 +195,16 @@ class CliDumper extends AbstractDumper
193
195
  }
194
196
  if ('' === $str) {
195
197
  $this->line .= '""';
198
+ if ($cut) {
199
+ $this->line .= '…'.$cut;
200
+ }
196
201
  $this->endValue($cursor);
197
202
  } else {
198
203
  $attr += [
199
204
  'length' => 0 <= $cut ? mb_strlen($str, 'UTF-8') + $cut : 0,
200
205
  'binary' => $bin,
201
206
  ];
202
- $str = explode("\n", $str);
207
+ $str = $bin && str_contains($str, "\0") ? [$str] : explode("\n", $str);
203
208
  if (isset($str[1]) && !isset($str[2]) && !isset($str[1][0])) {
204
209
  unset($str[1]);
205
210
  $str[0] .= "\n";
@@ -268,16 +273,12 @@ class CliDumper extends AbstractDumper
268
273
  }
269
274
  }
270
275
 
271
- /**
272
- * {@inheritdoc}
273
- */
274
- public function enterHash(Cursor $cursor, $type, $class, $hasChild)
276
+ public function enterHash(Cursor $cursor, int $type, string|int|null $class, bool $hasChild): void
275
277
  {
276
- if (null === $this->colors) {
277
- $this->colors = $this->supportsColors();
278
- }
278
+ $this->colors ??= $this->supportsColors();
279
279
 
280
280
  $this->dumpKey($cursor);
281
+ $this->expandNextHash = false;
281
282
  $attr = $cursor->attr;
282
283
 
283
284
  if ($this->collapseNextHash) {
@@ -309,10 +310,7 @@ class CliDumper extends AbstractDumper
309
310
  }
310
311
  }
311
312
 
312
- /**
313
- * {@inheritdoc}
314
- */
315
- public function leaveHash(Cursor $cursor, $type, $class, $hasChild, $cut)
313
+ public function leaveHash(Cursor $cursor, int $type, string|int|null $class, bool $hasChild, int $cut): void
316
314
  {
317
315
  if (empty($cursor->attr['cut_hash'])) {
318
316
  $this->dumpEllipsis($cursor, $hasChild, $cut);
@@ -328,7 +326,7 @@ class CliDumper extends AbstractDumper
328
326
  * @param bool $hasChild When the dump of the hash has child item
329
327
  * @param int $cut The number of items the hash has been cut by
330
328
  */
331
- protected function dumpEllipsis(Cursor $cursor, $hasChild, $cut)
329
+ protected function dumpEllipsis(Cursor $cursor, bool $hasChild, int $cut): void
332
330
  {
333
331
  if ($cut) {
334
332
  $this->line .= ' …';
@@ -344,13 +342,16 @@ class CliDumper extends AbstractDumper
344
342
  /**
345
343
  * Dumps a key in a hash structure.
346
344
  */
347
- protected function dumpKey(Cursor $cursor)
345
+ protected function dumpKey(Cursor $cursor): void
348
346
  {
349
347
  if (null !== $key = $cursor->hashKey) {
350
348
  if ($cursor->hashKeyIsBinary) {
351
349
  $key = $this->utf8Encode($key);
352
350
  }
353
- $attr = ['binary' => $cursor->hashKeyIsBinary];
351
+ $attr = [
352
+ 'binary' => $cursor->hashKeyIsBinary,
353
+ 'virtual' => $cursor->attr['virtual'] ?? false,
354
+ ];
354
355
  $bin = $cursor->hashKeyIsBinary ? 'b' : '';
355
356
  $style = 'key';
356
357
  switch ($cursor->hashType) {
@@ -374,7 +375,7 @@ class CliDumper extends AbstractDumper
374
375
  // no break
375
376
  case Cursor::HASH_OBJECT:
376
377
  if (!isset($key[0]) || "\0" !== $key[0]) {
377
- $this->line .= '+'.$bin.$this->style('public', $key).': ';
378
+ $this->line .= '+'.$bin.$this->style('public', $key, $attr).': ';
378
379
  } elseif (0 < strpos($key, "\0", 1)) {
379
380
  $key = explode("\0", substr($key, 1), 2);
380
381
 
@@ -409,7 +410,7 @@ class CliDumper extends AbstractDumper
409
410
  }
410
411
  }
411
412
 
412
- $this->line .= $bin.$this->style($style, $key[1], $attr).(isset($attr['separator']) ? $attr['separator'] : ': ');
413
+ $this->line .= $bin.$this->style($style, $key[1], $attr).($attr['separator'] ?? ': ');
413
414
  } else {
414
415
  // This case should not happen
415
416
  $this->line .= '-'.$bin.'"'.$this->style('private', $key, ['class' => '']).'": ';
@@ -429,22 +430,18 @@ class CliDumper extends AbstractDumper
429
430
  * @param string $style The type of style being applied
430
431
  * @param string $value The value being styled
431
432
  * @param array $attr Optional context information
432
- *
433
- * @return string The value with style decoration
434
433
  */
435
- protected function style($style, $value, $attr = [])
434
+ protected function style(string $style, string $value, array $attr = []): string
436
435
  {
437
- if (null === $this->colors) {
438
- $this->colors = $this->supportsColors();
439
- }
436
+ $this->colors ??= $this->supportsColors();
440
437
 
441
- if (null === $this->handlesHrefGracefully) {
442
- $this->handlesHrefGracefully = 'JetBrains-JediTerm' !== getenv('TERMINAL_EMULATOR') && !getenv('KONSOLE_VERSION');
443
- }
438
+ $this->handlesHrefGracefully ??= 'JetBrains-JediTerm' !== getenv('TERMINAL_EMULATOR')
439
+ && (!getenv('KONSOLE_VERSION') || (int) getenv('KONSOLE_VERSION') > 201100)
440
+ && !isset($_SERVER['IDEA_INITIAL_DIRECTORY']);
444
441
 
445
442
  if (isset($attr['ellipsis'], $attr['ellipsis-type'])) {
446
443
  $prefix = substr($value, 0, -$attr['ellipsis']);
447
- if ('cli' === \PHP_SAPI && 'path' === $attr['ellipsis-type'] && isset($_SERVER[$pwd = '\\' === \DIRECTORY_SEPARATOR ? 'CD' : 'PWD']) && 0 === strpos($prefix, $_SERVER[$pwd])) {
444
+ if ('cli' === \PHP_SAPI && 'path' === $attr['ellipsis-type'] && isset($_SERVER[$pwd = '\\' === \DIRECTORY_SEPARATOR ? 'CD' : 'PWD']) && str_starts_with($prefix, $_SERVER[$pwd])) {
448
445
  $prefix = '.'.substr($prefix, \strlen($_SERVER[$pwd]));
449
446
  }
450
447
  if (!empty($attr['ellipsis-tail'])) {
@@ -466,19 +463,27 @@ class CliDumper extends AbstractDumper
466
463
  $s = $startCchr;
467
464
  $c = $c[$i = 0];
468
465
  do {
469
- $s .= isset($map[$c[$i]]) ? $map[$c[$i]] : sprintf('\x%02X', \ord($c[$i]));
466
+ $s .= $map[$c[$i]] ?? \sprintf('\x%02X', \ord($c[$i]));
470
467
  } while (isset($c[++$i]));
471
468
 
472
469
  return $s.$endCchr;
473
470
  }, $value, -1, $cchrCount);
474
471
 
475
- if ($this->colors) {
472
+ if (!($attr['binary'] ?? false)) {
473
+ $value = preg_replace_callback(static::$unicodeCharsRx, function ($c) use (&$cchrCount, $startCchr, $endCchr) {
474
+ ++$cchrCount;
475
+
476
+ return $startCchr.'\u{'.strtoupper(dechex(mb_ord($c[0]))).'}'.$endCchr;
477
+ }, $value);
478
+ }
479
+
480
+ if ($this->colors && '' !== $value) {
476
481
  if ($cchrCount && "\033" === $value[0]) {
477
482
  $value = substr($value, \strlen($startCchr));
478
483
  } else {
479
484
  $value = "\033[{$this->styles[$style]}m".$value;
480
485
  }
481
- if ($cchrCount && $endCchr === substr($value, -\strlen($endCchr))) {
486
+ if ($cchrCount && str_ends_with($value, $endCchr)) {
482
487
  $value = substr($value, 0, -\strlen($endCchr));
483
488
  } else {
484
489
  $value .= "\033[{$this->styles['default']}m";
@@ -487,7 +492,7 @@ class CliDumper extends AbstractDumper
487
492
 
488
493
  href:
489
494
  if ($this->colors && $this->handlesHrefGracefully) {
490
- if (isset($attr['file']) && $href = $this->getSourceLink($attr['file'], isset($attr['line']) ? $attr['line'] : 0)) {
495
+ if (isset($attr['file']) && $href = $this->getSourceLink($attr['file'], $attr['line'] ?? 0)) {
491
496
  if ('note' === $style) {
492
497
  $value .= "\033]8;;{$href}\033\\^\033]8;;\033\\";
493
498
  } else {
@@ -495,24 +500,29 @@ class CliDumper extends AbstractDumper
495
500
  }
496
501
  }
497
502
  if (isset($attr['href'])) {
503
+ if ('label' === $style) {
504
+ $value .= '^';
505
+ }
498
506
  $value = "\033]8;;{$attr['href']}\033\\{$value}\033]8;;\033\\";
499
507
  }
500
- } elseif ($attr['if_links'] ?? false) {
501
- return '';
508
+ }
509
+
510
+ if ('label' === $style && '' !== $value) {
511
+ $value .= ' ';
512
+ }
513
+ if ($this->colors && ($attr['virtual'] ?? false)) {
514
+ $value = "\033[{$this->styles['virtual']}m".$value;
502
515
  }
503
516
 
504
517
  return $value;
505
518
  }
506
519
 
507
- /**
508
- * @return bool Tells if the current output stream supports ANSI colors or not
509
- */
510
- protected function supportsColors()
520
+ protected function supportsColors(): bool
511
521
  {
512
522
  if ($this->outputStream !== static::$defaultOutput) {
513
523
  return $this->hasColorSupport($this->outputStream);
514
524
  }
515
- if (null !== static::$defaultColors) {
525
+ if (isset(static::$defaultColors)) {
516
526
  return static::$defaultColors;
517
527
  }
518
528
  if (isset($_SERVER['argv'][1])) {
@@ -526,12 +536,14 @@ class CliDumper extends AbstractDumper
526
536
  case '--color=yes':
527
537
  case '--color=force':
528
538
  case '--color=always':
539
+ case '--colors=always':
529
540
  return static::$defaultColors = true;
530
541
 
531
542
  case '--no-ansi':
532
543
  case '--color=no':
533
544
  case '--color=none':
534
545
  case '--color=never':
546
+ case '--colors=never':
535
547
  return static::$defaultColors = false;
536
548
  }
537
549
  }
@@ -539,23 +551,20 @@ class CliDumper extends AbstractDumper
539
551
  }
540
552
 
541
553
  $h = stream_get_meta_data($this->outputStream) + ['wrapper_type' => null];
542
- $h = 'Output' === $h['stream_type'] && 'PHP' === $h['wrapper_type'] ? fopen('php://stdout', 'wb') : $this->outputStream;
554
+ $h = 'Output' === $h['stream_type'] && 'PHP' === $h['wrapper_type'] ? fopen('php://stdout', 'w') : $this->outputStream;
543
555
 
544
556
  return static::$defaultColors = $this->hasColorSupport($h);
545
557
  }
546
558
 
547
- /**
548
- * {@inheritdoc}
549
- */
550
- protected function dumpLine($depth, $endOfValue = false)
559
+ protected function dumpLine(int $depth, bool $endOfValue = false): void
551
560
  {
552
- if ($this->colors) {
553
- $this->line = sprintf("\033[%sm%s\033[m", $this->styles['default'], $this->line);
561
+ if ($this->colors ??= $this->supportsColors()) {
562
+ $this->line = \sprintf("\033[%sm%s\033[m", $this->styles['default'], $this->line);
554
563
  }
555
564
  parent::dumpLine($depth);
556
565
  }
557
566
 
558
- protected function endValue(Cursor $cursor)
567
+ protected function endValue(Cursor $cursor): void
559
568
  {
560
569
  if (-1 === $cursor->hashType) {
561
570
  return;
@@ -577,43 +586,47 @@ class CliDumper extends AbstractDumper
577
586
  *
578
587
  * Reference: Composer\XdebugHandler\Process::supportsColor
579
588
  * https://github.com/composer/xdebug-handler
580
- *
581
- * @param mixed $stream A CLI output stream
582
589
  */
583
- private function hasColorSupport($stream): bool
590
+ private function hasColorSupport(mixed $stream): bool
584
591
  {
585
592
  if (!\is_resource($stream) || 'stream' !== get_resource_type($stream)) {
586
593
  return false;
587
594
  }
588
595
 
589
596
  // Follow https://no-color.org/
590
- if (isset($_SERVER['NO_COLOR']) || false !== getenv('NO_COLOR')) {
597
+ if ('' !== (($_SERVER['NO_COLOR'] ?? getenv('NO_COLOR'))[0] ?? '')) {
591
598
  return false;
592
599
  }
593
600
 
594
- if ('Hyper' === getenv('TERM_PROGRAM')) {
601
+ // Follow https://force-color.org/
602
+ if ('' !== (($_SERVER['FORCE_COLOR'] ?? getenv('FORCE_COLOR'))[0] ?? '')) {
595
603
  return true;
596
604
  }
597
605
 
598
- if (\DIRECTORY_SEPARATOR === '\\') {
599
- return (\function_exists('sapi_windows_vt100_support')
600
- && @sapi_windows_vt100_support($stream))
601
- || false !== getenv('ANSICON')
602
- || 'ON' === getenv('ConEmuANSI')
603
- || 'xterm' === getenv('TERM');
606
+ // Detect msysgit/mingw and assume this is a tty because detection
607
+ // does not work correctly, see https://github.com/composer/composer/issues/9690
608
+ if (!@stream_isatty($stream) && !\in_array(strtoupper((string) getenv('MSYSTEM')), ['MINGW32', 'MINGW64'], true)) {
609
+ return false;
604
610
  }
605
611
 
606
- if (\function_exists('stream_isatty')) {
607
- return @stream_isatty($stream);
612
+ if ('\\' === \DIRECTORY_SEPARATOR && @sapi_windows_vt100_support($stream)) {
613
+ return true;
608
614
  }
609
615
 
610
- if (\function_exists('posix_isatty')) {
611
- return @posix_isatty($stream);
616
+ if ('Hyper' === getenv('TERM_PROGRAM')
617
+ || false !== getenv('COLORTERM')
618
+ || false !== getenv('ANSICON')
619
+ || 'ON' === getenv('ConEmuANSI')
620
+ ) {
621
+ return true;
622
+ }
623
+
624
+ if ('dumb' === $term = (string) getenv('TERM')) {
625
+ return false;
612
626
  }
613
627
 
614
- $stat = @fstat($stream);
615
- // Check if formatted mode is S_IFCHR
616
- return $stat ? 0020000 === ($stat['mode'] & 0170000) : false;
628
+ // See https://github.com/chalk/supports-color/blob/d4f413efaf8da045c5ab440ed418ef02dbb28bf1/index.js#L157
629
+ return preg_match('/^((screen|xterm|vt100|vt220|putty|rxvt|ansi|cygwin|linux).*)|(.*-256(color)?(-bce)?)$/', $term);
617
630
  }
618
631
 
619
632
  /**
@@ -630,8 +643,8 @@ class CliDumper extends AbstractDumper
630
643
  || 'xterm' === getenv('TERM')
631
644
  || 'Hyper' === getenv('TERM_PROGRAM');
632
645
 
633
- if (!$result && \PHP_VERSION_ID >= 70200) {
634
- $version = sprintf(
646
+ if (!$result) {
647
+ $version = \sprintf(
635
648
  '%s.%s.%s',
636
649
  PHP_WINDOWS_VERSION_MAJOR,
637
650
  PHP_WINDOWS_VERSION_MINOR,
@@ -643,7 +656,7 @@ class CliDumper extends AbstractDumper
643
656
  return $result;
644
657
  }
645
658
 
646
- private function getSourceLink(string $file, int $line)
659
+ private function getSourceLink(string $file, int $line): string|false
647
660
  {
648
661
  if ($fmt = $this->displayOptions['fileLinkFormat']) {
649
662
  return \is_string($fmt) ? strtr($fmt, ['%f' => $file, '%l' => $line]) : ($fmt->format($file, $line) ?: 'file://'.$file.'#L'.$line);
@@ -26,7 +26,7 @@ final class CliContextProvider implements ContextProviderInterface
26
26
 
27
27
  return [
28
28
  'command_line' => $commandLine = implode(' ', $_SERVER['argv'] ?? []),
29
- 'identifier' => hash('crc32b', $commandLine.$_SERVER['REQUEST_TIME_FLOAT']),
29
+ 'identifier' => hash('xxh128', $commandLine.'@'.$_SERVER['REQUEST_TIME_FLOAT']),
30
30
  ];
31
31
  }
32
32
  }
@@ -18,8 +18,5 @@ namespace Symfony\Component\VarDumper\Dumper\ContextProvider;
18
18
  */
19
19
  interface ContextProviderInterface
20
20
  {
21
- /**
22
- * @return array|null Context data or null if unable to provide any context
23
- */
24
21
  public function getContext(): ?array;
25
22
  }
@@ -22,12 +22,11 @@ use Symfony\Component\VarDumper\Cloner\VarCloner;
22
22
  */
23
23
  final class RequestContextProvider implements ContextProviderInterface
24
24
  {
25
- private $requestStack;
26
- private $cloner;
25
+ private VarCloner $cloner;
27
26
 
28
- public function __construct(RequestStack $requestStack)
29
- {
30
- $this->requestStack = $requestStack;
27
+ public function __construct(
28
+ private RequestStack $requestStack,
29
+ ) {
31
30
  $this->cloner = new VarCloner();
32
31
  $this->cloner->setMaxItems(0);
33
32
  $this->cloner->addCasters(ReflectionCaster::UNSET_CLOSURE_FILE_INFO);
@@ -45,7 +44,7 @@ final class RequestContextProvider implements ContextProviderInterface
45
44
  'uri' => $request->getUri(),
46
45
  'method' => $request->getMethod(),
47
46
  'controller' => $controller ? $this->cloner->cloneVar($controller) : $controller,
48
- 'identifier' => spl_object_hash($request),
47
+ 'identifier' => hash('xxh128', spl_object_id($request).'@'.$_SERVER['REQUEST_TIME_FLOAT']),
49
48
  ];
50
49
  }
51
50
  }
@@ -11,7 +11,7 @@
11
11
 
12
12
  namespace Symfony\Component\VarDumper\Dumper\ContextProvider;
13
13
 
14
- use Symfony\Component\HttpKernel\Debug\FileLinkFormatter;
14
+ use Symfony\Component\ErrorHandler\ErrorRenderer\FileLinkFormatter;
15
15
  use Symfony\Component\VarDumper\Cloner\VarCloner;
16
16
  use Symfony\Component\VarDumper\Dumper\HtmlDumper;
17
17
  use Symfony\Component\VarDumper\VarDumper;
@@ -25,17 +25,12 @@ use Twig\Template;
25
25
  */
26
26
  final class SourceContextProvider implements ContextProviderInterface
27
27
  {
28
- private $limit;
29
- private $charset;
30
- private $projectDir;
31
- private $fileLinkFormatter;
32
-
33
- public function __construct(string $charset = null, string $projectDir = null, FileLinkFormatter $fileLinkFormatter = null, int $limit = 9)
34
- {
35
- $this->charset = $charset;
36
- $this->projectDir = $projectDir;
37
- $this->fileLinkFormatter = $fileLinkFormatter;
38
- $this->limit = $limit;
28
+ public function __construct(
29
+ private ?string $charset = null,
30
+ private ?string $projectDir = null,
31
+ private ?FileLinkFormatter $fileLinkFormatter = null,
32
+ private int $limit = 9,
33
+ ) {
39
34
  }
40
35
 
41
36
  public function getContext(): ?array
@@ -44,7 +39,7 @@ final class SourceContextProvider implements ContextProviderInterface
44
39
 
45
40
  $file = $trace[1]['file'];
46
41
  $line = $trace[1]['line'];
47
- $name = false;
42
+ $name = '-' === $file || 'Standard input code' === $file ? 'Standard input code' : false;
48
43
  $fileExcerpt = false;
49
44
 
50
45
  for ($i = 2; $i < $this->limit; ++$i) {
@@ -56,7 +51,7 @@ final class SourceContextProvider implements ContextProviderInterface
56
51
  $line = $trace[$i]['line'] ?? $line;
57
52
 
58
53
  while (++$i < $this->limit) {
59
- if (isset($trace[$i]['function'], $trace[$i]['file']) && empty($trace[$i]['class']) && 0 !== strpos($trace[$i]['function'], 'call_user_func')) {
54
+ if (isset($trace[$i]['function'], $trace[$i]['file']) && empty($trace[$i]['class']) && !str_starts_with($trace[$i]['function'], 'call_user_func')) {
60
55
  $file = $trace[$i]['file'];
61
56
  $line = $trace[$i]['line'];
62
57
 
@@ -98,7 +93,7 @@ final class SourceContextProvider implements ContextProviderInterface
98
93
 
99
94
  if (null !== $this->projectDir) {
100
95
  $context['project_dir'] = $this->projectDir;
101
- if (0 === strpos($file, $this->projectDir)) {
96
+ if (str_starts_with($file, $this->projectDir)) {
102
97
  $context['file_relative'] = ltrim(substr($file, \strlen($this->projectDir)), \DIRECTORY_SEPARATOR);
103
98
  }
104
99
  }
@@ -19,25 +19,22 @@ use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface;
19
19
  */
20
20
  class ContextualizedDumper implements DataDumperInterface
21
21
  {
22
- private $wrappedDumper;
23
- private $contextProviders;
24
-
25
22
  /**
26
23
  * @param ContextProviderInterface[] $contextProviders
27
24
  */
28
- public function __construct(DataDumperInterface $wrappedDumper, array $contextProviders)
29
- {
30
- $this->wrappedDumper = $wrappedDumper;
31
- $this->contextProviders = $contextProviders;
25
+ public function __construct(
26
+ private DataDumperInterface $wrappedDumper,
27
+ private array $contextProviders,
28
+ ) {
32
29
  }
33
30
 
34
- public function dump(Data $data)
31
+ public function dump(Data $data): ?string
35
32
  {
36
- $context = [];
33
+ $context = $data->getContext();
37
34
  foreach ($this->contextProviders as $contextProvider) {
38
- $context[\get_class($contextProvider)] = $contextProvider->getContext();
35
+ $context[$contextProvider::class] = $contextProvider->getContext();
39
36
  }
40
37
 
41
- $this->wrappedDumper->dump($data->withContext($context));
38
+ return $this->wrappedDumper->dump($data->withContext($context));
42
39
  }
43
40
  }