Back to Phan

README

src/Phan/README.md

6.0.55.5 KB
Original Source

Layout of src/Phan

Also see https://github.com/phan/phan/wiki/Developer%27s-Guide-To-Phan

Folders

Analysis

Classes that analyze ASTS. They may do one or more of the following things:

AST

Classes that work with ASTs

  • Classes
  • ContextNode, which gets information about an AST in it's Context
  • Base classes for the different types of visitors

Daemon

Classes used when Phan is running in the background and receiving requests ("daemon mode"). Also see LanguageServer/

  • Classes for requests and responses the Phan-specific protocol (i.e. used by phan_client)
  • Logic for forking off workers to analyze the CodeBase, then to receive the analysis results.

Debug

Utilities for developers working on Phan to debug it.

Exception

Exception classes used by Phan's implementation.

Language

Contains data structures for representations of PHP code bases, and methods acting on those data structures.

LanguageServer

Contains an implementation of the Language Server Protocol, which is a common protocol supported in various IDEs. Also see Daemon/

  • Classes that get received and sent over JSON RPC2
  • Logic for forking off workers to analyze the CodeBase, then to receive the analysis results.

Library

Contains reusable data structures that aren't specific to analyzing PHP. (Map, Set, Option, Tuple, Hasher, etc.)

Output

This contains implementation details for printing out Phan issues. This includes formatters (text, JSON, pylint, etc.) as well as how Phan would colorize issues.

Parse

This contains implementation details for Phan's initial parse phase. In the parse phase, all code is parsed in order to build maps from FQSENs to elements.

Plugin

This contains implementation details for working with the set of plugins loaded by the user (ConfigPluginSet). Plugin/Internal also contains plugins Phan loads automatically (e.g. for improving analysis of array_map, call_user_func, etc.)

PluginV3

This contains the current implementation (v3) of the plugin system. *Capability.php contains capabilities that PluginV3 instances can extend. See https://github.com/phan/phan/wiki/Writing-Plugins-for-Phan for more information on plugin development.

Files

Analysis.php

This class is the entry point into the static analyzer.

BlockAnalysisVisitor.php

Analyze blocks of code.

  • Uses \Phan\Analysis\PreOrderAnalysisVisitor for pre-order analysis of a node (E.g. entering a function to analyze)
  • Recursively analyzes child nodes
  • Uses \Phan\Analysis\PostOrderAnalysisVisitor for post-order analysis of a node (E.g. analyzing a statement with the updated Context and emitting issues)
  • If there is more than one possible child context, merges state from them (variable types)

Bootstrap.php

Sets up error handlers, PHP configuration, and the composer autoloader.

CLI.php

Contains methods for parsing CLI arguments to Phan, outputting to the CLI, as well as helper methods to retrieve files/folders for the analyzed project.

CodeBase.php

A CodeBase represents the known state of a code base we're analyzing. It maps FQSENs to the representation of the object for both scanned code and internal PHP elements. See Developer's Guide to Phan

Config.php

Program configuration. The configuration data is overridden by the analyzed project's .phan/config.php as well as CLI options.

Daemon.php

Implementation of daemon mode. (Daemon for phan_client). Also see LanguageServer/

Debug.php

Mostly utilities for printing representations of AST nodes. Also see Debug/

ForkPool.php

Contains the ForkPool used for running multiple analysis workers(i.e. --processes N)

IssueInstance.php

Contains an emitted issue with issue details (file, line, format string arguments, etc.)

Issue.php

Contains the list of built in issue types, as well as common information (Severity, issue names, format strings, remediation difficulty, etc.)

Memoize.php

A utility trait to memoize (cache) the result of instance methods and static methods.

Ordering.php

This determines the order in which files will be analyzed. (Affected by consistent_hashing_file_order and randomize_file_order. By default, files are analyzed in the same order as .phan/config.php)

Phan.php

This executes the parse, method/function, then the analysis phases.

This is the entry point of Phan's implementation. Implementations such as ./phan or the code climate integration call into this.

Plugin.php

Deprecated version of plugin system, use PluginV3 instead.

PluginV3.php

Introduced in Phan 2.0

Plugins must extend this class (And at least one of the interfaces corresponding to plugin capabilities in the PluginV3 folder) and return an instance of themselves.

Prep.php

Part of a separate tool for scanning a code base. Not commonly used.

Profile.php

For development only: Utility for profiling Phan runs. Used if the profiler_enabled config setting is true.

Util.php