当前位置: 首页>>代码示例>>PHP>>正文


PHP NodeTraverser::traverse方法代码示例

本文整理汇总了PHP中PhpParser\NodeTraverser::traverse方法的典型用法代码示例。如果您正苦于以下问题:PHP NodeTraverser::traverse方法的具体用法?PHP NodeTraverser::traverse怎么用?PHP NodeTraverser::traverse使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在PhpParser\NodeTraverser的用法示例。


在下文中一共展示了NodeTraverser::traverse方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: resolveConstructor

 /**
  * @param Node\Stmt\Class_ $node
  *
  * @return Node\Stmt\Class_
  */
 public function resolveConstructor(Node\Stmt\Class_ $node)
 {
     foreach ($node->stmts as $key => $stmt) {
         if ($stmt instanceof Node\Stmt\ClassMethod && $stmt->name === '__construct') {
             // this will make problems we need an layer above which chains the variable resolvers
             // because we need may need more than this resolver
             // skip constructor if is abstract
             if ($stmt->isAbstract()) {
                 return $node;
             }
             // change recursivly the nodes
             $subTraverser = new NodeTraverser();
             foreach ($this->visitors as $visitor) {
                 $subTraverser->addVisitor($visitor);
             }
             // the table switches to a method scope
             // $x = ... will be treated normal
             // $this->x = ... will be stored in the above class scope and is available afterwards
             $this->table->enterScope(new TableScope(TableScope::CLASS_METHOD_SCOPE));
             $subTraverser->traverse($stmt->params);
             $nodes = $subTraverser->traverse($stmt->stmts);
             $this->table->leaveScope();
             //override the old statement
             $stmt->stmts = $nodes;
             // override the classmethod statement in class
             $node->stmts[$key] = $stmt;
             // return the changed node to override it
             return $node;
         }
     }
     // no constructor defined
     return $node;
 }
开发者ID:slde-rorschach,项目名称:deprecation-detector,代码行数:38,代码来源:ConstructorResolver.php

示例2: lint

 /**
  * @param $code
  * @param bool $autoFix - In case of true - pretty code will be generated (avaiable by getPrettyCode method)
  * @return Logger
  */
 public function lint($code, $autoFix = false)
 {
     $this->autoFix = $autoFix;
     $this->prettyCode = '';
     $this->logger = new Logger();
     try {
         $stmts = $this->parser->parse($code);
     } catch (Error $e) {
         $this->logger->addRecord(new LogRecord('', '', Logger::LOGLEVEL_ERROR, $e->getMessage(), ''));
         return $this->logger;
     }
     $traverser = new NodeTraverser();
     $rulesVisitor = new RulesVisitor($this->rules, $this->autoFix);
     $traverser->addVisitor($rulesVisitor);
     $traverser->traverse($stmts);
     $messages = $rulesVisitor->getLog();
     foreach ($messages as $message) {
         $this->logger->addRecord(new LogRecord($message['line'], $message['column'], $message['level'], $message['message'], $message['name']));
     }
     if ($autoFix) {
         $prettyPrinter = new PrettyPrinter\Standard();
         $this->prettyCode = $prettyPrinter->prettyPrint($stmts);
     }
     $sideEffectVisitor = new SideEffectsVisitor();
     $traverser->addVisitor($sideEffectVisitor);
     $traverser->traverse($stmts);
     if ($sideEffectVisitor->isMixed()) {
         $this->logger->addRecord(new LogRecord('', '', Logger::LOGLEVEL_ERROR, 'A file SHOULD declare new symbols (classes, functions, constants, etc.) and cause no other side' . 'effects, or it SHOULD execute logic with side effects, but SHOULD NOT do both.', ''));
     }
     return $this->logger;
 }
开发者ID:koktut,项目名称:hexlet-psr-linter,代码行数:36,代码来源:PsrLinter.php

示例3: walk

 public function walk($fileNodes)
 {
     array_walk($fileNodes, function (&$nodes) {
         $nodes = $this->traverser->traverse($nodes);
     });
     return $fileNodes;
 }
开发者ID:digitalkaoz,项目名称:typehint-to-docblock,代码行数:7,代码来源:NodeWalker.php

示例4: parseFile

 /**
  * @param PhpFileInfo $phpFileInfo
  *
  * @return PhpFileInfo
  */
 public function parseFile(PhpFileInfo $phpFileInfo)
 {
     foreach ($this->deprecationVisitors as $visitor) {
         $visitor->setPhpFileInfo($phpFileInfo);
     }
     $this->traverser->traverse($this->parse($phpFileInfo->getContents()));
     return $phpFileInfo;
 }
开发者ID:Soullivaneuh,项目名称:deprecation-detector,代码行数:13,代码来源:DeprecationParser.php

示例5: itShouldAnalyseAllFiles

 /**
  * @test
  */
 public function itShouldAnalyseAllFiles()
 {
     $files = [fixture('MyClass.php')];
     $nodes = [$this->node];
     $parseRes = $this->parser->parse(Argument::type('string'));
     $this->parser->parse(Argument::type('string'))->shouldBeCalled()->willReturn($nodes);
     $this->nodeTraverser->traverse($nodes)->shouldBeCalled();
     $this->analyser->analyse($files);
 }
开发者ID:rskuipers,项目名称:php-assumptions,代码行数:12,代码来源:AnalyserTest.php

示例6: parse

 /**
  * @param string $code
  * @param int $lineNumber
  * @return Node
  */
 public function parse($code, $lineNumber)
 {
     $stmts = $this->parser->parse($code);
     $this->nodeVisitor->setLine($lineNumber);
     $this->nodeTraverser->addVisitor($this->nodeVisitor);
     $this->nodeTraverser->traverse($stmts);
     $node = $this->nodeVisitor->getNode();
     return $node;
 }
开发者ID:angrybender,项目名称:phpPM,代码行数:14,代码来源:ParserLine.php

示例7: parseFile

 /**
  * @param PhpFileInfo $phpFileInfo
  *
  * @return PhpFileInfo
  */
 public function parseFile(PhpFileInfo $phpFileInfo)
 {
     $nodes = $this->parse($phpFileInfo->getContents());
     $nodes = $this->nameResolver->traverse($nodes);
     $nodes = $this->staticTraverser->traverse($nodes);
     foreach ($this->violationVisitors as $visitor) {
         $visitor->setPhpFileInfo($phpFileInfo);
     }
     $this->violationTraverser->traverse($nodes);
     return $phpFileInfo;
 }
开发者ID:Soullivaneuh,项目名称:deprecation-detector,代码行数:16,代码来源:UsageParser.php

示例8: scan

 /**
  * @param string $file
  */
 public function scan($file)
 {
     // Set the current file used by the registry so that we can tell where the change was scanned.
     $this->registry->setCurrentFile($file);
     $code = file_get_contents($file);
     try {
         $statements = $this->parser->parse($code);
         $this->traverser->traverse($statements);
     } catch (Error $e) {
         throw new RuntimeException('Parse Error: ' . $e->getMessage() . ' in ' . $file);
     }
 }
开发者ID:nochso,项目名称:php-semver-checker,代码行数:15,代码来源:Scanner.php

示例9: parse

 /**
  * @param $code
  * @param $sourcePath
  * @return Model
  */
 public function parse($code, $sourcePath)
 {
     try {
         $stmts = $this->parser->parse($code);
         $stmts = $this->traverser->traverse($stmts);
         if ($this->namespaceParser->match($stmts)) {
             $this->namespaceParser->parse($stmts, $sourcePath);
         }
     } catch (PhpParserError $e) {
         throw new ParseException('Parse Error: ' . $e->getMessage());
     }
     return $this->model;
 }
开发者ID:domaincoder,项目名称:code-metamodel-php,代码行数:18,代码来源:Parser.php

示例10: extractTombstones

 /**
  * @param string $filePath
  *
  * @throws TombstoneExtractionException
  */
 public function extractTombstones($filePath)
 {
     $this->visitor->setCurrentFile($filePath);
     if (!is_readable($filePath)) {
         throw new TombstoneExtractionException('File "' . $filePath . '" is not readable.');
     }
     try {
         $code = file_get_contents($filePath);
         $stmts = $this->parser->parse($code);
         $this->traverser->traverse($stmts);
     } catch (Error $e) {
         throw new TombstoneExtractionException('PHP code in "' . $filePath . '" could not be parsed.', null, $e);
     }
 }
开发者ID:scheb,项目名称:tombstone-analyzer,代码行数:19,代码来源:TombstoneExtractor.php

示例11: minify

 /**
  * @param array $classMap
  * @param bool  $noComments
  */
 public function minify(array $classMap, $noComments)
 {
     if ($noComments) {
         $this->printer->disableComments();
     }
     file_put_contents($this->target, "<?php ");
     foreach ($classMap as $file) {
         if ($stmts = $this->parser->parse(file_get_contents($file))) {
             $stmts = $this->traverser->traverse($stmts);
             $code = $this->printer->prettyPrintFile($stmts);
             file_put_contents($this->target, $code, FILE_APPEND);
         }
     }
 }
开发者ID:mamuz,项目名称:squeezer,代码行数:18,代码来源:Writer.php

示例12: parse

 /**
  * Parses a content of the file and returns a transformed one
  *
  * @param string $content Source code to parse
  *
  * @return string Transformed source code
  */
 public static function parse($content)
 {
     $astNodes = self::$parser->parse($content);
     $astNodes = self::$traverser->traverse($astNodes);
     $content = self::$printer->prettyPrintFile($astNodes);
     return $content;
 }
开发者ID:goaop,项目名称:ast-manipulator,代码行数:14,代码来源:Engine.php

示例13: implement

 public function implement($class)
 {
     $parts = $orig_parts = explode("\\", ltrim($class, "\\"));
     $real_class_parts = [];
     while ($part = array_shift($parts)) {
         if (strpos($part, self::CLASS_TOKEN) !== false) {
             break;
         }
         $real_class_parts[] = $part;
     }
     array_unshift($parts, $part);
     $types = [];
     foreach ($parts as $part) {
         $types[] = str_replace([self::CLASS_TOKEN, self::NS_TOKEN], ["", "\\"], $part);
     }
     $real_class = implode("\\", $real_class_parts);
     if (!class_exists($real_class)) {
         throw new \RuntimeException("Attempting to use generics on unknown class {$real_class}");
     }
     if (!($ast = $this->compiler->getClass($real_class))) {
         throw new \RuntimeException("Attempting to use generics with non-generic class");
     }
     $generator = new Generator($ast->getAttribute("generics"), $types);
     $traverser = new NodeTraverser();
     $traverser->addVisitor($generator);
     $ast = $traverser->traverse([$ast]);
     $ast[0]->name = array_pop($orig_parts);
     $ast[0]->extends = new Node\Name\FullyQualified($real_class_parts);
     array_unshift($ast, new Node\Stmt\Namespace_(new Node\Name($orig_parts)));
     return $this->prettyPrinter->prettyPrint($ast);
 }
开发者ID:killer100,项目名称:PhpGenerics,代码行数:31,代码来源:Engine.php

示例14: check

 /**
  * @param ExerciseInterface $exercise
  * @param string $fileName
  * @return ResultInterface
  */
 public function check(ExerciseInterface $exercise, $fileName)
 {
     if (!$exercise instanceof FunctionRequirementsExerciseCheck) {
         throw new \InvalidArgumentException();
     }
     $requiredFunctions = $exercise->getRequiredFunctions();
     $bannedFunctions = $exercise->getBannedFunctions();
     $code = file_get_contents($fileName);
     try {
         $ast = $this->parser->parse($code);
     } catch (Error $e) {
         return Failure::fromCheckAndCodeParseFailure($this, $e, $fileName);
     }
     $visitor = new FunctionVisitor($requiredFunctions, $bannedFunctions);
     $traverser = new NodeTraverser();
     $traverser->addVisitor($visitor);
     $traverser->traverse($ast);
     $bannedFunctions = [];
     if ($visitor->hasUsedBannedFunctions()) {
         $bannedFunctions = array_map(function (FuncCall $node) {
             return ['function' => $node->name->__toString(), 'line' => $node->getLine()];
         }, $visitor->getBannedUsages());
     }
     $missingFunctions = [];
     if (!$visitor->hasMetFunctionRequirements()) {
         $missingFunctions = $visitor->getMissingRequirements();
     }
     if (!empty($bannedFunctions) || !empty($missingFunctions)) {
         return new FunctionRequirementsFailure($this, $bannedFunctions, $missingFunctions);
     }
     return Success::fromCheck($this);
 }
开发者ID:jacmoe,项目名称:php-workshop,代码行数:37,代码来源:FunctionRequirementsCheck.php

示例15: visitPhpFile

 /**
  * @param \SplFileInfo $file
  * @param MessageCatalogue $catalogue
  * @param array $ast
  */
 public function visitPhpFile(\SplFileInfo $file, MessageCatalogue $catalogue, array $ast)
 {
     $this->file = $file;
     $this->namespace = '';
     $this->catalogue = $catalogue;
     $this->traverser->traverse($ast);
 }
开发者ID:clytemnestra,项目名称:JMSTranslationBundle,代码行数:12,代码来源:AuthenticationMessagesExtractor.php


注:本文中的PhpParser\NodeTraverser::traverse方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。