Note : the more recent changelog is here.

Version 2.0.0

2019-10-21 – Civil Star of Mystery and Darkness

  • Architecture
    • Manual file/line fixes
    • More simplifcations in load step
  • Report
    • Ambassador : fixed performance display
    • Ambassador : report list of shell commands
    • Typehint4all : first report
    • Perfile : fixed sorting
  • Analysis
    • New analysis : Report possible typehint for bool, int, string, array. WIP
    • Upgraded analysis : common alternatives are extended to switch and elsif
    • Upgraded analysis : xmlreader description includes class constants, properties and methods.
    • Upgraded analysis : callback needs return, is extended to php native functions
    • Checked unit tests : 3345 / 3377 test pass (99% pass)

Version 1.9.9

2019-10-14 – Lasting Prosperity Star of True Man

  • Architecture
    • Documentation review
  • Report
    • New reports : Stubs, Rector
    • Typehint stats
    • Stubs takes into account use expression
    • Added Concrete5 and Typo3 as vendors
  • Analysis
    • New analysis : checks on is_a third argument
    • New analysis : Invalid mbstring encodings
    • New analysis : Weird Index in arrays
    • New analysis : Avoid FILTER_SANITIZE_MAGIC_QUOTES
    • New analysis : Don’t forget third argument
    • New analysis : Hard to update methods
    • New analysis : Merge two ifthen into one
    • New analysis : Report wrong type with calls
    • New analysis : Check case for namespaces
    • Updated analysis : Undefined interfaces now includes interfaces extensions
    • Updated analysis : Report more wrong types with return type
    • Updated analysis : Register globals also applied to class
    • Updated analysis : Could Use Try covers more new, functions and static calls
    • Updated analysis : Useless Cast also reports (string) array (always Array)
    • Checked unit tests : 3343 / 3366 test pass (99% pass)
  • Tokenizer
    • Create default values for foreach
    • Load captures empty files, and omit them
    • Create default values also handles ??=

Version 1.9.8

2019-10-07 – Giant Gate Star of Dark Essence

  • Architecture
    • Upgraded dump command to handle multiple -P
    • .yaml configuration handles multiple reports
    • Started journey to strict_types
    • Code cleaning
  • Report
    • Ambassador : Fixed report of Flexible Docs
    • Ambassador : trimmed delimiters in inventories
    • Inventory : Foreach, with key values
  • Analysis
    • New analysis : Wrong case for functions
    • New analysis : Parameter Hiding
    • New analysis : Report usage of Traversable
    • Updated analysis : Undeclared properties skips undefined properties
    • Updated analysis : Useless Interface, modernized query
    • Updated analysis : String Holding Variables now skips default, const, sprintf
    • Updated analysis : Binaries are not confused with hex
    • Updated analysis : Extended ‘Insufficient typehint’ to abstract classes
    • Checked unit tests : 3324 / 3343 test pass (99% pass)
  • Tokenizer
    • Fixed handling of large powers
    • Added more escaping when storing to SQLITE

Version 1.9.7

2019-09-30 – Greedy Wolf Star of Sunlight

  • Architecture
    • Added support for analysis reporting missing values in a reference list
    • Fixe batch dumping of results
  • Report
    • Ambassador : new inventory : dereferencing levels
  • Analysis
    • New analysis : Use PHP Native URL parsing functions
    • New analysis : Maximum dereferencing level
    • New analysis : Use case value in a switch : it was already tested
    • Updated analysis : No class as typehint accepts abstract classes
    • Updated analysis : Create Magic Property reachs out to traits
    • Updated analysis : Security also reports usage of unserialize()
    • Updated analysis : Mistmatched default argument also covers methods
    • Updated analysis : Never used parameter also covers methods
    • Updated analysis : Unused global also cover static variables
    • Updated analysis : Duplicate strings threshold is not 15, not 5.
    • Checked unit tests : 3289 / 3319 test pass (99% pass)
  • Tokenizer
    • RETURNTYPE, TYPEHINT, and DEFAUT are not always on, with Void atom, or better.
    • DEFAULT value targets end-values, skips ??, ?:, () and =.
    • Exceptions now reports errors in the Query, not where it is thrown

Version 1.9.6

2019-09-23 – Star of Birth

  • Architecture
    • Moved new elements to Complete/
    • Moved new elements to Dump/
    • Initial configuration of project now includes analysis parameters with default
    • Added descriptions to Rulesets
    • New command Config : displays current configuration for reuse and editing
    • Upgraded Doctor : support for docker-php, in-code
  • Report
    • Ambassador : removed {} on magic property inventory
    • Ambassador : new inventory of network protocols used (udp://, ssh2://…)
  • Analysis
    • New analysis : avoid mb_string inside loops
    • New analysis : avoid SSLvx and TLSv1.0
    • New analysis : report duplicate literal in the code, with parameter
    • New analysis : warn about null property
    • New coverage : calls to __call and __callStatic
    • Updated coverage : expressions with parenthesis
    • Updated coverage : default values are now targeting the final value in multiple assignations.
    • Updated analysis : Strange Variable name skips Staticdefinition and its default value
    • Updated analysis : Useless instructions are upgrade with pure functions
    • Updated analysis : Extended Closure2string with Arrowfunctions
    • Updated analysis : Extended ‘Could be local variable’ to traits
    • Updated analysis : Unused Global also covers static variables
    • Checked unit tests : 3279 / 3304 test pass (99% pass)
  • Tokenizer
    • Updated tokens for PHP 7.4

Version 1.9.5

2019-09-16 – Star of Adversity

  • Architecture
    • Added count property to Analysis node, stepstone for Diff analysis
    • Added support for ‘optional’ step
    • Added support for ‘interfaces’ as typehint for remote definitions
    • Removed more true/false values
    • Fixed strtolower with mb_strtolower in Dump
  • Report
    • Added several PHP error messages
    • Ambassador : added inventory of magic properties
    • Ambassador : added inventory of typehints for methods (WIP)
    • Added support for function/closure/argument arguments
    • Added support for function/closure/argument arguments
  • Analysis
    • New analysis : No literal value as referenced argument
    • New analysis : use array_slice or array_splice
    • New analysis : Useless typechecks with Typehint
    • New analysis : Report non-implemented interfaces
    • New analysis : Incompatible Signatures with Self (PHP 7.4+)
    • New analysis : Report wrong expectations from interfaces
    • Upgraded analysis : Excluded __construct and __destruct from Magic Methods
    • Upgraded analysis : Concat and Addition : Now also for bitshift
    • Upgraded analysis : Incompatible Signatures with Self (PHP 7.3)
    • Upgraded analysis : Elseif and Sequences are omitted in Level analysis
  • Tokenizer
    • Upgraded support for magic properties

Version 1.9.4

2019-09-09 – Star of Benefit

  • Architecture
    • Dump avoid storing multiple definition for the same class
    • Added more native return definitions
    • Adding UT for Complete/
    • Dump inventories are being moved to analysis class
    • Moving more Themes => rulesets
  • Report
    • Ambassador : Fixed several internal links
    • Ambassador : Displays the levels of nesting in the code
    • Ambassador : Upgraded compatibility report with PHP 7.4
    • New report : Stubs
  • Analysis
    • New analysis : PHP 7.4 New Directives
    • New analysis : Too many dimensions with array
    • New analysis : Check concat and coalesce precedence
    • New analysis : Adopt explode() third argument
    • New analysis : Ternary and useless assignation
    • New analysis : Nested ternary without parenthesis
    • New analysis : Spread operator with arrays
    • New analysis : Max level of indentation
    • New analysis : Use Arrowfunctions
    • Upgraded analysis : Clone with non object handles containers
    • Upgraded analysis : Calling non-static methods statically
    • Upgraded analysis : Unresolved Instanceof
    • Upgraded analysis : Array_merge and variadic, extended to isset
    • Checked unit tests : 3234 / 3259 test pass (99% pass)
  • Tokenizer
    • Last element of list() is not omitted anymore

Version 1.9.3

2019-09-02 – Star of Longevity

  • Architecture
    • Created new Complete category, with data complement for analysis
    • Refactored constant propagation
    • Made code compatible with PHP 7.4
    • Rename project_themas to project_rulesets
    • Added support of -p with .exakat.yaml
  • Report
    • Ambassador : reworked presentation for visibility suggestions
  • Analysis
    • New analysis : report covariance and contravariance for compatibility
    • New analysis : no spread operator for hash values
    • New analysis : self-closing tags are omitted by strip_tags
    • New analysis : report Openssl_random_pseudo_byte second argument usage
    • New analysis : CURLPIPE_HTTP1 is obsolete
    • New analysis : removed PHP 7.4 directives
    • New analysis : do not use … with array_merge without checks
    • Updated analysis : added crc32c as hash algorithm
    • Removed analysis : Removed Curly Arrays (double take)
    • Checked unit tests : 3219 / 3240 test pass (99% pass)
  • Tokenizer
    • Extended OVERWRITE to Interfaces
    • Extended support for class_alias()

Version 1.9.2

2019-08-26 – Star of Prosperity

  • Architecture
    • Introduced a new set of analysis : Complete
    • Cleaned code for PHP 7.4 usage
    • Refactored Query to skip impossible Gremlin calls
    • Now using Project for project names
  • Report
    • New report : classes dependencies (HTML version)
    • New report : files dependencies (HTML and DOT version)
    • Ambassador : datas -> data
  • Analysis
    • New analysis : {} are deprecated in PHP 7.4
    • New analysis : Don’t use ENT_IGNORE
    • New analysis : fn is a PHP 7.4 keyword
    • Updated analysis : Functions/UseConstantAsArguments covers also password_hash()
    • Updated analysis : printf arguments now handles positional formatters
    • Checked unit tests : 3172 / 3199 test pass (99% pass)
  • Tokenizer
    • Fixed precedence for left associativity

Version 1.9.1

2019-08-19 – Star of Life

  • Architecture
    • Fixed zip as code source
  • Report
    • Ambassador : Fixed issues list for Favorites
    • Owasp : switched dashboards
  • Analysis
    • Updated analysis : Loop Calling got one extra check
    • Checked unit tests : 3148 / 3187 test pass (99% pass)

Version 1.9.0

2019-07-29 – Ming Wenzhang of Jiayin

  • Architecture
    • Added missing configuration file for tinkergraph 3.4
    • Upgraded support for running exakat with PHP 7.4
  • Analysis
    • New analysis : array_key_exists() now report object usage
    • New analysis : report mb_strrpos 4th argument
    • New analysis : Reflection export are deprecated
    • New analysis : Report classes without parents but with ‘parent’
    • New analysis : Don’t use scalar as arrays
    • New analysis : Report use of PHP 7.4 serialize method
    • Updated analysis : Multiple Identical Keys checks for undefined keys first
    • Updated analysis : Dont be too manual : extended to catch clauses
    • Updated analysis : setcookie detection anchors the keyword at the beginning of the string
    • Updated analysis : Failed Substr comparison now works with constants
    • Updated analysis : Added support for continue 2 and 3
    • Checked unit tests : 3147 / 3186 test pass (99% pass)
  • Tokenizer
    • Added support for __serialize and __unserialize
    • Added support for numeric literal separator
    • Skip entirely unparsable files

Version 1.8.9

2019-07-22 – Meng Feiqing of Jiachen

  • Architecture
    • Check on graphdb configuration : default to nogremlin
    • Added support for baseline for project and report
    • Moved more doc to ruleset
    • Check on .git folder for update
    • Added -version option for upgrade command
    • Doctor honors .exakat.yml file
  • Analysis
    • New analysis : Report useless type of checks
    • New analysis : Disconnected classes
    • New analysis : Avoid using mb_detect_encoding()
    • New analysis : Check that source and blind variables are different in foreach
    • New analysis : ~ or ! favorite
    • Updated analysis : Is Zero omits multiplications
    • Updated analysis : Used Private Property is upgraded
    • Updated analysis : Multiple Identical Keys : refactored
    • Updated analysis : Undefined variables now skips extract, include, eval
    • Checked unit tests : 3147 / 3166 test pass (99% pass)
  • Tokenizer
    • Refactored support for Foreach : each blind variable is in VALUE
    • Upgraded precedence for ! (not)
    • Propagate constants with assignations
    • Fixed link to $this inside heredoc and co
    • Fixed an edgecase where Static method call was confused with Newcall

Version 1.8.8

2019-07-15 – Wei Yuqing of Jiawu

  • Architecture
    • Modernized tinkergraph support
    • When pcntl is available, stubs are produced in a child process
    • Removed duplicated methods
    • Exported sequences to helpers
    • More UT libraries are supported
    • Federated BUSYTIMEOUT in constant
  • Report
    • Ambassador and all dependend reports were refactored : menu is configurable with Yaml
    • Emissary is the upcoming configurable report.
  • Analysis
    • New step : Load data from code
    • New analysis : Variables used for setting aside value temporarily
    • New analysis : Use PHP array_* functions, instead of loops
    • Updated analysis : Unused methods now skips methods from PHP native interfaces (Arrayaccess)
    • Updated analysis : No class for typehint is now omitting PHP and extensions classes
    • Updated analysis : Switch to Switch applies to comparisons now
    • Updated analysis : Close namingg was sped up significantly
    • Updated analysis : array_column() suggestion was refined
    • Updated analysis : Htmlentities parameters also support some parenthesis usage
    • Updated analysis : Constant Scalar Expression only target specified expressions
    • Updated analysis : Static Properties skip Virtual properties
    • Checked unit tests : 3131 / 3155 test pass (99% pass)
  • Tokenizer
    • Refactored support for Exit and Die
    • Added raw support for phpdoc

Version 1.8.7

2019-07-08 – Hu Wenchang of Jiashen

  • Architecture
    • Added bugs fixes up to 7.3.7
    • New factory method for the graph
  • Analysis
    • New analysis : Backward compatible check on generators (can’t return)
    • New analysis : Report wrong return typehint
    • New analysis : Use DateTimeImmutable
    • New concept : Methods that throw errors
    • Updated analysis : Recursive functions disambiguate methods
    • Updated analysis : Refactored property/variable confusion
    • Updated analysis : Could typehint checks on type validations
    • Updated analysis : Variable used once check for abstract methods
    • Updated analysis : Array_merge in loops omits file_put_contents()
    • Updated analysis : Simple Regex covers all special sequences, and unicode sequences
    • Checked unit tests : 3131 / 3142 test pass (99% pass)
  • Tokenizer
    • Differentiated support for self and static in calls
    • Moved Symfony support to its extension
    • Reworked loading to make it parallels.

Version 1.8.6

2019-07-01 – Wei Yuqing of Jiawu

  • Architecture
    • Added support for Tinkegraph 3.4
    • Extended support for Dev
    • Renamed Themes to Ruleset (WIP)
    • Split several long running queries into smaller chunks
    • Cached files to memory, write them once only
    • Optimized sides queries : omitting them when possible
    • Added count of issues in Analyse node
    • Optimized loading by grouping by inV
    • More coverage for Arrowfunction
  • Report
    • Dump : collect PHP cyclomatic complexity
  • Analysis
    • New analysis : Dependant abstract classes
    • New analysis : Don’t use Null or Boolean as an array
    • New analysis : Infinite recursion
    • Updated analysis : Raised levels
    • Updated analysis : Method signature must be compatible
    • Updated analysis : Access Private in Trait is OK
    • Updated analysis : Recursive function
    • Checked unit tests : 3099 / 3105 test pass (99% pass)
  • Tokenizer
    • Upgraded support for ‘Modules’

Version 1.8.5

2019-06-24 – Zhan Zijiang of Jiaxu

  • Architecture
    • Fixed several bugs in the online documentation
    • Started removing analysis, replacing with analysis
    • Fixed path in docker PHP usage.
  • Report
    • Ambassador : Export full INI and YAML config to replicate audit
  • Analysis
    • New analysis : Unused class constants
    • New analysis : Could Use available Trait
    • New analysis : literal that Could Be Constant
    • Updated analysis : Access Private in Trait is OK
    • Updated analysis : multiple identical argument is extended to closures, methods
    • Updated analysis : ext/rdkafka
    • Updated analysis : No Hardcoded Hash is accelerated
    • Updated analysis : Extended printf() check to constants
    • Updated analysis : Optimized ‘redefined method’
    • Updated analysis : Memoize Magic Call
    • Updated analysis : set_locale requires constants
    • Checked unit tests : 3099 / 3105 test pass (99% pass)
  • Tokenizer
    • Added missing isModified to Foreach keys
    • Class Method Definition handles old style constructor
    • strict_types don’t yield a block
    • Added typed values for magic constants
    • Refactored new -> constructor link for Self, Static, parent
    • Added missing arguments count to Newcall

Version 1.8.4

2019-06-17 – Wang Wenqing of Jiazi

  • Architecture
    • Added support for PHP in docker images for compilation tests
    • First prototype for Gremlin in a specific docker image
  • Report
    • Ambassador : restored original URL
    • Replaced ‘Complexity’ => ‘Time To Fix’
    • Replaced ‘Receipt’ => Ruleset
  • Analysis
    • New analysis : regex with arrays
    • New analysis : Complex property names
    • New analysis : array_key_exists speed up
    • New analysis : curl_version forbidden argument
    • New analysis : PHP 7.4 new functions, classes and constants
    • Fixed analysis : Long Variable
    • Updated analysis : printf() format check extended to constants
    • Updated analysis : Written only variables is extended to static and global
    • Updated analysis : refactored ‘Make default’
    • Updated analysis : ‘Wrong number of arguments’ is extended to methods
    • Updated analysis : ‘Use coalesce’ checks for
    • Updated analysis : Refactored ‘Nested ifthen’ to have a parameter
    • Updated analysis : Extended ‘Class Usage’ to return typehint
    • Updated analysis : Sped up ‘Used Classes’
    • Checked unit tests : 2993 / 3071 test pass (97% pass)
  • Tokenizer
    • Upgraded handling of declare with strict_types
    • Support for magic properties across classes and traits
    • Added support for parent with properties
    • Properties are handled with static and normal at the same time
    • Fixed virtualproperties with static keyword (self and parent are ok)
    • Added argument count for ‘new A’, without parenthesis
    • Restored old break behavior for PHP 5 and older.

Version 1.8.3

2019-06-10 – Jade Man of Yang

  • Architecture
    • Extension docs show version numbers
    • Manual uses internal links
  • Report
    • New report : SARB
    • Updated report : Ambassador list number of arguments in natural order
  • Analysis
    • New analysis : from substr() to trim()
    • New analysis : suggest making magic property a concrete one (2 ways)
    • New analysis : no array auto-append
    • Updated analysis : ‘Scalar or object property’ refactored
    • Updated analysis : ‘Multiple identical keys’ get a new check on intval, broadened to constants
    • Updated analysis : ‘Indirect injection’ accelerated
    • Updated analysis : ‘Could be class constant’ accelerated
    • Updated analysis : ‘Never used property’ refactored
    • Updated analysis : ‘Modern empty’ modernized and broadened
    • Updated analysis : ‘Useless check’ skips isset/empty as they may be useful
    • Updated analysis : ‘Identical methoods’ skips abstract methods
    • Updated analysis : ‘No Count Zero’ also uses sizeof(), skips switch()
    • Checked unit tests : 2993 / 3071 test pass (97% pass)
  • Tokenizer
    • Upgraded local definitions for properties to Load phase
    • Handle static keyword in closures
    • Moved ‘Real’ to ‘Float’
    • Created ‘Scalartypehint’ atom
    • Fixed intval, boolval for \true and \false

Version 1.8.2

2019-06-03 – Zhao Ziyu of Dingchou

  • Architecture
    • Refactored ‘Update’ command, to VCS
    • Collect missing definitions counts
    • Report handles a list of analysis names
  • Analysis
    • New analysis : No Need To Get_Class
    • New analysis : Report identical inherited methods
    • New analysis : Function returning -1 in case of error
    • Updated analysis : TypeHint must be returned, doesn’t apply to abstract methods or interface methods
    • Updated analysis : ‘Could Use Interface’ also checks for static and visibility
    • Updated analysis : ‘Concat empty’ skips variables
    • Checked unit tests : 3024 / 3048 test pass (99% pass)
  • Tokenizer
    • Created ‘virtual’ properties, for limiting children agglomerations
    • Fixed normalized code for use traits
    • Added DEFAULT to all variable definitions
    • Connect strings to class definitions
    • Handle variable in ‘compact’, when they are static

Version 1.8.1

2019-05-27 – Zhang Wentong of Dinghai

  • Architecture
    • Fixed Symlink destination
    • Added collecting classes children, traits and interfaces counts
    • Added support for constants and functions in modules
    • Added missing functions in data
  • Report
    • New report : exakatYaml, which help configuring exakat
    • New report : Yaml
    • New report : Top10
    • Updated report : Json, text and xml get ‘fullcode’
  • Analysis
    • Updated analysis : Should use self is extended to parent classes
    • Updated analysis : Should use prepared statement now skips some SQL queries
    • Checked unit tests : 3024 / 3048 test pass (99% pass)

Version 1.8.0

2019-05-20 – Zang Wengong of Dingyou

  • Architecture
    • Added missing native PHP functions
    • Restored anchor for ignore_dirs[] configuration
    • Removed more MAX_LOOPING usage
  • Report
    • Ambassador : removed { & @ } artefacts from globals
  • Analysis
    • New analysis : Function returning -1 in case of error
    • New analysis : Report PHP 7.4 unpacking inside array
    • New analysis : Report PHP 7.4 new functions and fn
    • New analysis : Useless arguments
    • New analysis : Addition and concatenation precedence for PHP 7.4
    • New analysis : report concatenation of empty strings
    • New analysis : casting has precedence over ternary
    • New analysis : report already used traits
    • New analysis : report missing traits in use expression
    • Updated analysis : isset on whole arrays : extended analysis to Phpvariables
    • Updated analysis : SQLITE3 requires single quotes
    • Updated analysis : Dir then slash : extended to constants
    • Updated analysis : Variable Strange Name extended to strange types
    • Updated analysis : Possible interface’s analysis is sped up
    • Checked unit tests : 3021 / 3045 test pass (99% pass)
  • Tokenizer
    • Fixed fullcode of Usetrait
    • Extended method definitions to traits
    • Extended fluent interface detection to parents
    • Fixed dump for visibility change
    • Handle method aliases in use expression (as)
    • Better noDelimiter for double quotes strings

Version 1.7.9

2019-05-13 – Shi Shutong of Dingwei

  • Architecture
    • Upgraded list of functions by extension : openssl, math, hrtime
    • Added global atom to track all globals
    • Rewrote several Dump queries with DSL
    • Added support for Notice in Phpexec
    • Added support for .exakat.ini and .exakat.yaml
    • Added support for arrow functions : fn =>
    • Added support for spread operator in arrays […[1,2,3]]
  • Report
    • Inventories : added ‘inclusions’ and ‘global variables’
    • Ambassador : added global variables
  • Analysis
    • New analysis : support for ext/ffi, uuid
    • Updated analysis : Nested Ternary handles parenthesis
    • Updated analysis : Static loops is extended to references and arrays
    • Updated analysis : Recursive function is extended to Magic methods and Closures
    • Checked unit tests : 3014 / 3019 test pass (99% pass)
  • Tokenizer
    • Moved ‘is_in_ignored_dir’ to a property
    • Cleaned getFullnspath() call in Load
    • Fixed latent bug on Function fullnspath
    • Heredoc and Nowdoc are reported as constant if needed
    • Isset() is not read
    • Ignore PHP notices when linting
    • Globals are now centralised across a repository
    • Extended definitions for Virtualproperties
    • Removed double DEFINITION link with new

Version 1.7.8

2019-05-06 – Cui Juqing of Dingyi

  • Architecture
    • renamed test.php to ut.php in tests
    • reorganized destinations folders
    • organized exakat for ‘inside code’ audit
  • Analysis
    • New analysis : support for libsvm
    • Updated analysis : Multiple unset() handles unset() at the beginning of the scope
    • Updated analysis : undefined static class now accounts for PHP and module classes
    • Checked unit tests : 2961 / 2995 test pass (99% pass)
  • Tokenizer
    • Extended class usage to static::class.
    • refactored 2 analysis for speed : double instruction and double assignations
    • fixed recent bug where Project token is twice.

Version 1.7.7

2019-04-29 – Sima Qing of Dingmao

  • Architecture
    • Upgraded to gremlin-php 3.1.1
    • Moved autoload into its own namespace
    • Started extending themes to modules
    • Skip external libraries when unit testing
    • Dump got one more query moved to DSL
    • Fixed build for overwritten methods, extended to magic methods
    • Load tokens by batch (5000+ tokens), not by file.
  • Analysis
    • New analysis : Security : integer conversion
    • New analysis : implode() with one argument
    • Updated analysis : Invalid Regex handles \\ more precisely
    • Updated analysis : delimiter detection was checked for all of them
    • Checked unit tests : 2947 / 2983 test pass (99% pass)
  • Tokenizer
    • Upgraded Fallback detection for functions

Version 1.7.6

2019-04-22 – Jade Maiden of Yin

  • Architecture
    • Refactored Class definition with return typehint
    • Added configuration for including development extensions.
    • Extended LoadFinal typehint hunting
  • Report
    • Phpcsfixer : new report
    • Ambassador : report usage of overridden PHP functions
    • Ambassador : new favorite : variable name in catch clause
  • Analysis
    • New analysis : array_merge and ellipsis should use coalesce
    • New analysis : Report overridden PHP native functions
    • New analysis : Merge all unset() into one
    • Updated analysis : Added missing constant for curl, pgsql, openssl
    • Updated analysis : Variadic are not variable arguments
    • Updated analysis : Useless Reference argument extended to foreach()
    • Updated analysis : Use Constant also covers pi()
    • Updated analysis : Inclusion Wrong Case handles dirname with 2nd argument
    • Updated analysis : Useless Argument : handles some edge cases with arrays
    • Checked unit tests : 2947 / 2975 test pass (99% pass)
  • Tokenizer
    • Upgraded handling of isRead and isModified attributes
    • Changed variadic argument counts in method declarations
    • Fixed original value in ‘Sign’

Version 1.7.5

2019-04-15 – Xue King Zhuanlun

  • Architecture
    • Cleaned unused variables
  • Report
    • Ambassador : bugfixes report version 7.3, dropped 5.6 and 5.5
  • Analysis
    • Updated analysis : Already interface : extended to interface parents
    • Updated analysis : Else if to elseif : extended to one-liners
    • Updated analysis : No reference for ternary was extended
    • Updated analysis : Implements is for interface
    • Updated analysis : Refactored Is a Magic Property
    • Updated analysis : Refactored Conditional structures for constants
    • Checked unit tests : 2926 / 2950 test pass (99% pass)
  • Tokenizer
    • Link properties to magicmethod
    • Deduplicated virtual properties
    • Added isRead and IsModified properties. Omitting the corresponding analysis.

Version 1.7.4

2019-04-08 – Lu King Pingdeng

  • Architecture
    • reports, themes may be specified multiple times
    • ‘project’ command also work on themes and report from command line
    • Added htmlpurifier in auto-ignored libraries
    • Counting definitions, omitting Virtualproperties
    • Automatically detect identical files
  • Report
    • Inventories are grouped by values, sorted by count
  • Analysis
    • Updated analysis : This is for class : extended analysis to self and parent
    • Updated analysis : Undefined Classes
    • Updated analysis : Refactored Defined Parent MP
    • Updated analysis : Redefined PHP function is restricted to global scope
    • Updated analysis : Could Use Alias also covers functions, constants.
    • Updated analysis : Refined SQL detection
    • Fixed step : goToALlParentsTrait missed some of the parent
    • Checked unit tests : 2916 / 2944 test pass (99% pass)
  • Tokenizer
    • Removed impossible implementations of traits
    • Fixed functioncalls’ ‘absolute’ property
    • Refined parent’s definitions
    • Trait also sports virtualproperties
    • Virtualproperties now respect visibilities
    • Distinguish Variables from Staticpropertynames
    • Added missing DEFINITION for Use (namespaces)

Version 1.7.3

King Dushi, 2019-04-01 – Huang

  • Architecture
    • New command ‘show’ that display project creation command
    • Refactored UT detection mechanism
  • Report
    • Ambassador : report identical files in the code
    • Ambassador : global variable inventory is now grouped by name
  • Analysis
    • Updated analysis : PPPDeclaration style : handles Virtualproperties
    • Updated analysis : Closure2string : extended analysis
    • Updated analysis : Non-Ascii variable skips { }, & and @
    • Updated analysis : Could Be Static exclude abstract methods
    • Updated analysis : MismatchedTypehint : handles methodcalls and class hierarchy
    • Updated analysis : Could Use Try : refined analysis to avoid literals
    • Updated analysis : Hidden use, handles Virtualproperty
    • Updated analysis : Classes, wrong case, handles FQN
    • Checked unit tests : 2846 / 2926 test pass (97% pass)
  • Tokenizer
    • Moved creation of Virtualproperty early, to catch more situations
    • Virtualproperty mimic Propertydefinition
    • Added extra check when roaming the classes tree
    • Handles Sign constant values correctly

Version 1.7.2

2019-03-25 – Dong King Taishan

  • Architecture
    • Restored the external library checker
    • Added support for extension’s CIT (Symfony, Drupal)
  • Report
    • Ambassador : added Suggestions theme to docs.
    • Perfile : New report, text, per file
  • Analysis
    • New analysis : Report potential ‘unsupported operand type’
    • New analysis : Check for existence with __call() and __callstatic
    • Updated analysis : Wrong number of arguments (methods) upgraded
    • Updated analysis : Could Be Static ignores empty methods, constants methods
    • Updated analysis : Added Variable to possibly useless expression
    • Updated analysis : Constant names are detected based on available noDelimiter
    • Updated analysis : Abstract classes may have no abstract methods
    • Checked unit tests : 2889 / 2912 test pass (99% pass)
  • Tokenizer
    • Added link between __clone and clone
    • Now handling functions and constants when ignored
    • Fixed dynamic constants in collector

Version 1.7.1

2019-03-18 – Bi King Biancheng

  • Report
    • Ambassador : report lines that concentrate lots of issues
  • Analysis
    • Extended GoToAllImplements to extended interfaces
    • Updated analysis : NoScream usage, with authorized functioncall list like fopen
    • Updated analysis : HiddenUse with support for virtual properties
    • Checked unit tests : 2867 / 2900 test pass (99% pass)
  • Tokenizer
    • Added support for ‘Virtualproperties’
    • Harmonized file escaping feature

Version 1.7.0

2019-03-11 – Bao King Yama

  • Architecture
    • Added auto-documenting ‘ignored’ cit to weed out obvious false positive
  • Report
    • Made Diplomat the default report
    • Added History report : it stores metrics from audit to audit
  • Analysis
    • New analysis : Identify self transforming variables ($x = foo($x))
    • New analysis : Report unclonable variables
    • Updated analysis : Undefined Classes, Interfaces and Trait now omit ‘ignored’ cit from folders
    • Updated analysis : Inconsistent usage is refactored for properties
    • Updated analysis : Useless expression, with clone new x
    • Updated analysis : Only Variable For Reference accepts $this, $_GET
    • Updated analysis : Lost References was modernized
    • Checked unit tests : 2854 / 2884 test pass (99% pass)
  • Tokenizer
    • Refactored support for Staticmethod (in a trait’s use)
    • Added definitions for trait’s use

Version 1.6.9

2019-03-04 – Lu King Wuguan

  • Architecture
    • Optimized Dump when navigating the links to the File Atom
    • Refactored LoadFinal into separate classes
    • Upgraded to Tinkergraph 3.3.5
    • Added options to cleandb to stop and start gremlin from exakat
    • Skip the task if no analysis has to run
  • Analysis
    • New analysis : Report inconsistent usage of properties or variables
    • New analysis : Typehinted return must return
    • Updated analysis : Variables used once handles closure (use) correctly
    • Updated analysis : Is Zero was refactored partially (WIP)
    • Updated analysis : Bad Typehint relay got a fix
    • Updated analysis : Function Subscripting is only suggested for one usage
    • Updated analysis : Lost References was modernized
    • Checked unit tests : 2854 / 2881 test pass (99% pass)
  • Tokenizer
    • Added definition for injected properties
    • Fixed sack() for subqueries
    • $this is not a classic variable
    • Removed double DEFINITION links
    • Fixed edge case with define() at the end of a script

Version 1.6.8

2019-02-25 – Yu King Songdi

  • Architecture
    • Added support for PHP 8.0
    • Fixed Constant FNP
    • Advance progressbar when ignoring files
  • Report
    • Ambassador : report usage of factories
    • Collect stats about Foreach usage
  • Analysis
    • New analysis : Report violation of law of Demeter
    • New analysis : Report removed constants and functions in PHP 8.0
    • Updated analysis : Refactored Nullable Typehint
    • Checked unit tests : 2851 / 2872 test pass (99% pass)
  • Tokenizer
    • Fixed edge case for Logical with strings
    • Reduced max level of looping in GoToAllParents
    • Distinguish $$ and ${$

Version 1.6.7

2019-02-18 – Li King Chujiang

  • Architecture
    • Documentation covers more PHP functions
    • Added some missing PHP functions
    • Fixed destination folder for extensions
  • Report
    • Ambassador : limited size of default values in visibility report.
    • Ambassador : reporting class depth
    • Ambassador : reporting dynamically created constants
    • Diplomat : leanner, meaner version of Ambassador
    • New category : Top 10 classic mistakes
  • Analysis
    • New analysis : Report when relayed typehint are not the sames
    • Updated analysis : Regex now handles local variables and constants
    • Updated analysis : Variables Used Once now covers closures and use
    • Checked unit tests : 2846 / 2867 test pass (99% pass)
  • Tokenizer
    • Defineconstant may be constant
    • Fixed handling of Nullable for typehint
    • Started preparing for Gremlin 3.4.0 : WIP

Version 1.6.6

2019-02-11 – Jiang King Qinguang

  • Architecture
    • Removed FetchContext() from DSL
    • Added options to follow constants from atomIs.
  • Report
    • Now dumps magic methods
  • Analysis
    • New analysis : Report insufficient interfaces in typehint
    • Updated analysis : Class constant now ignore empty classes
    • Checked unit tests : 2837 / 2858 test pass (99% pass)
  • Tokenizer
    • Moved ‘Define’ to its own atom
    • Upgraded Logical to hanlde Strings as PHP
    • Fixed T_POWER => T_POW
    • Refactored calculation for globalpath
    • Fixed edgecase with endswitch;

Version 1.6.5

2019-02-04 – Mahagate

  • Architecture
    • Added CVS as an external service
    • Graph GSNeo4j export variable for shell access. putenv is not sufficient
    • Dump : report class name, not its code
    • Extended listAllThemes to extensions
    • Fixed bug in extension loader with phar
  • Report
    • Ambassador : restored file dependencies tree
    • Ambassador : fixed altered directive filename
    • Ambassador : added direct link to docs
  • Analysis
    • New analysis : arrays that are initialized with strings
    • New analysis : Avoid Lone variables as conditions
    • New analysis : Added support for weakref and pcov
    • Updated analysis : extended regex to arrays in preg_* calls
    • Updated analysis : Implicit globals now also marks the variable in global space
    • Updated analysis : Add Zero, Multiply by One also cover 2 * $x = 1;
    • Updated analysis : Could Use Interface now takes into account PHP interfaces, and classes first level.
    • Updated analysis : Relay Functions now omits calls to parent’s __construct and __destruct
    • Checked unit tests : 2830 / 2852 test pass (99% pass)

Version 1.6.4

2019-01-28 – Parasamgate

  • Architecture
    • Added support for CVS as a VCS
    • Upgraded support for tar as a VCS
    • Added support modification counts by files
    • Added first tracking for closures
    • Upgraded Tinkergraph driver
  • Report
    • Added Atoms in the documentations
    • Extra protection for Class Changes
  • Analysis
    • Updated analysis : Use-arguments are now counted as arguments
    • Updated analysis : Max Argument check was refactored
    • Updated analysis : IsModified now takes into account extensions
    • Updated analysis : Should Use This now exclude empty methods
    • Updated analysis : undefined classes now support PHP 7.4 typed properties
    • Updated analysis : added missing scalar PHP types
    • Updated analysis : uncaught exceptions now cover parents
    • Updated analysis : refactored incompatibility checks for methods
    • Checked unit tests : 2824 / 2841 test pass (99% pass)
  • Tokenizer
    • Refactored alternative ending, removed extra VOID
    • Upgraded contexts and their nesting
    • Added extra checks on variables names
    • Added support for ??= (PHP 7.4)

Version 1.6.3

2019-01-21 – Paragate

  • Architecture
    • Better presentation for exakat extensions
    • Added build.xml for Jenkins
    • Fixed copyright years
  • Report
    • Ambassador : fixed class name for Phpcompilation
  • Analysis
    • New analysis : assign and compare at the same time
    • Updated analysis : uncaught exceptions now cover parents
    • Updated analysis : strpos too much is extended to strrpos and strripos
    • Updated analysis : Refactored Indirect injections for more refined reports
    • Updated analysis : Empty Block doesn’t omit Ifthen anymore
    • Updated analysis : Implemented methods are public mistook interface methods
    • Updated analysis : Object Reference omits arguments that are wholly assigned
    • Checked unit tests : 2808 / 2826 test pass (99% pass)
  • Tokenizer
    • Added support for PHP 7.4 typed properties (needs PHP 7.4-dev)

Version 1.6.2

2019-01-14 – Silver Headed Gate

  • Architecture
    • Fixed infinite loop when an option missed a value
    • Produce phpversion in config.ini, but leave it commented
  • Report
    • Ambassador : colored syntax for visibility report
    • Ambassador : inventory reports now display number of usages
  • Analysis
    • Updated analysis : Added support for PHP 7.2.14
    • Updated analysis : Avoid Using Class handles \
    • Updated analysis : Unused Functions works with multiple identical functions
    • Checked unit tests : 2795 / 2817 test pass (99% pass)
  • Tokenizer
    • Fixed bug that mixed T_OR and T_XOR
    • Fixed bug that missed intval for Power
    • Handles multiple definitions of functions
    • Removed one Void too many with closing tag

Version 1.6.1

2019-01-07 – Golden Light Gate

  • Architecture
    • Upgraded documentation for Extensions
    • Upgraded processing of files, specially with special chars
    • Project stops when no token are found
    • Storing hash for each files. RFU.
  • Report
    • Ambassador : added support for class constant’s changes
    • Ambassador : added classSize report
    • Ambassador : ‘New issues’ now takes line difference into account
    • Themes are better dumped
  • Analysis
    • New analysis : array_key_exists() is faster in PHP 7.4
    • New analysis : partial report from preg_match()
    • Updated analysis : Avoid Using Class handles \
    • Updated analysis : Class Usage uses class_alias()
    • Updated analysis : Empty traits
    • Updated analysis : Unused arguments now skips __set()
    • Updated analysis : Path strings
    • Updated analysis : Missing include handles more concatenations
    • Checked unit tests : 2792 / 2812 test pass (99% pass)
  • Tokenizer
    • Fixed precedence for identical operators
    • Fixed bug with ?> inside switch

Version 1.6.0

2018-12-31 – VirupakSa

  • Architecture
    • VCS are not tested when they are not used
  • Analysis
    • Updated analysis : Php Reserved names ignores variable variables
    • Updated analysis : Array not using a constant, with Heredoc
    • Updated analysis : Long arguments
    • Updated analysis : Empty With Expression ignores simple assignations
    • Refactored analysis : Callback needs returns
    • Refactored analysis : No Return used
    • Checked unit tests : 2780 / 2805 test pass (99% pass)
  • Tokenizer
    • Fixed regression with Yield and =>
    • Fixed edge case “$a[-0x00]”

Version 1.5.9

2018-12-24 – Dhrtarastra

  • Architecture
    • Use PHP in project config for default PHP version
    • cleandb uses -p
    • Moved projects/.exakat to projects/<-p>/.exakat folders
    • Using $config and not more hardcoded tinkergraph
    • Extra check on doctor
  • Report
    • Ambassador : extra check for ‘previous’ report
  • Analysis
    • Upgraded analysis : Empty With Expression skip a few false positive
    • Checked unit tests : 2770 / 2795 test pass (99% pass)
  • Tokenizer
    • Fixed edgecase for methods named ‘class’
    • Fixed class name in Project

Version 1.5.8

2018-12-17 – Virudhaka

  • Architecture
    • Handles themas provided by extensions
    • Added busyTimeout for dump.sqlite
    • Reduced size of thema tables
    • Docs handle parameter dynamically
    • Added ‘update’ for extensions
  • Report
    • Ambassador : added a ‘Path’ inventory, with file paths
  • Analysis
    • New analysis : Closures that are identical
    • Upgraded analysis : Url and SQL detection, case sensitivity
    • Upgraded analysis : Could Use array_fill_keys
    • Upgraded analysis : Undefined functions doesn’t miss functions inside classes, handles interfaces
    • Upgraded analysis : Empty Functions better handles return;
    • Upgraded analysis : Long Argument may be configured
    • Upgraded analysis : Fixed bug with empty include path
    • Checked unit tests : 2770 / 2795 test pass (99% pass)
  • Tokenizer
    • Added FNP to strings
    • First link between method and definition with typehint
    • Support for class_alias
    • Fixed edge case with use ?>
    • Fixed variable in string behavior for $this and $php variables

Version 1.5.7

2018-12-10 – Vaisravana

  • Architecture
    • Extended Dump to support aliased methods
    • Support for SQLITE in extensions
    • Moved each framework to extensions
    • Added Laravel extension
  • Documentation
    • First version for the Extension chapter
    • Fixed mysterious ‘ in the docs
  • Report
    • Ambassador : added a ‘New issues’ section, with new analysis
    • Ambassador : added trait matrix
    • Ambassador : fixed an infinite loop when trait include themselves in cycles
    • Added more message count to several reports
  • Analysis
    • New analysis : method could be static
    • New analysis : multiple inclusion of traits
    • New analysis : avoid self using traits
    • New analysis : ext/wasm and ext/async
    • Upgraded analysis : No Hardcoded Hash, skip hexadecimal numbers
    • Upgraded analysis : Defined properties extends to traits
    • Upgraded analysis : PSS outside a class, when PSS are in strings
    • Upgraded analysis : Access private works with methods (not just static)
    • Checked unit tests : 2772 / 2785 test pass (99% pass)
  • Tokenizer
    • Fixed bug in Dump, when nothing to clean
    • Fixed edge bug on Callable detection
    • Extended support for self, static and parent, in typehint and new
    • Fixed precedence of yield and yield from
    • Fixed handling of throw at the end of a script
    • Added support to solve conflict on traits

Version 1.5.6

2018-12-03 – Jingang

  • Architecture
    • Moved all framework to extensions. WIP.
    • Code cleaning
    • Refactored the analysis dependency sorting
    • Now display progress bar for files
    • Fixed configuration for directories and files
  • Report
    • Fixed FileDependecy and DependencyWheel, to actually count messages
  • Analysis
    • Added a lot more new method descriptions for PHP native classes
    • New analysis : suggestion simplification for !isset($a) || !isset($a[1])
    • New analysis : Useless Trait alias
    • New analysis : report usage of ext/sdl
    • Upgraded analysis : Refactored IsZero, to handle assignations and parenthesis
    • Upgraded analysis : pack format is better checked
    • Checked unit tests : 2759 / 2771 test pass (99% pass)
  • Tokenizer
    • Fixed a missing fullnspath for origin in Use for Traits
    • Handles simple aliases for traits methods
    • Fixed mishandling of variables inside strings
    • Fixed support of negative numbers inside strings
    • Fixed bug with yield inside an array
    • Fixed strange case with define and integers as constant names

Version 1.5.5

2018-11-25 – Ratnadhvaja

  • Architecture
    • Initial version of Exakat extensions
    • Moved processing of 2-tokens files to Load
    • Speed up CSV creations
    • Upgrades are read from https, no http
    • Moved loading’s sqlite to memory for speed gain
    • Doctor now auto-create test folder
  • Report
    • New report : Php city. See your PHP code as a city
    • Ambassador : Appinfo() now reports keywords used as method or property
    • Fixed reported names of properties
  • Analysis
    • New analysis : checks some HTTP headers for security
    • New analysis : Use _file() functions, not file_get_contents()
    • New analysis : Optimize looks for fgetcsv()
    • Upgraded analysis : Several refactored analysis
    • Checked unit tests : 3083 / 3096 test pass (99% pass)
  • Tokenizer
    • Fixed encoding error in loading, for clone types.

Version 1.5.4

2018-11-19 – Mahakasyapa

  • Architecture
    • Added error message for memory limit
    • Added GC to Project action
    • Migrated Melis to extension
    • Dumping data is now done en masse
    • Analysers now handle side-queries
    • Clear message in case of memory limit
    • Doctor doesn’t stop at missing helpers
    • VCS leak less errors
    • Added support for 7z
    • Extended validation for themas
    • Restored Tinkergraph driver
    • Upgrade logs with extra reports
  • Analysis
    • New analysis : Report problems with class constant visibilities
    • New analysis : Avoid self, parent and static in interfaces
    • Upgraded analysis : Variable reuse now skips empty arrays
    • Checked unit tests : 3077 / 3090 test pass (99% pass)
  • Tokenizer
    • Fixed bug where variable was mistaken for a string inside strings

Version 1.5.3

2018-11-12 – Ananda

  • Architecture
    • Extended results to methods, traits
    • Added support for PHP 7.2.12
    • ‘master’ is not used anymore as default branch
    • Fixed creation of initial config/exakat.ini
    • Fixed handling badly written exakat.ini or PHP binary paths
  • Report
    • Ambassador : report classes that could be final or abstract
  • Analysis
    • New analysis : Property Used Once : now includes redefined functions
    • New analysis : iterator_to_array() should use yield with keys or array_merge()
    • New analysis : Don’t loop on yield : use yield from
    • Upgraded analysis : Dependant trait now include parent-traits
    • Checked unit tests : 3080 / 3093 test pass (99% pass)
  • Tokenizer
    • Changed handling of variable that are both global AND local
    • Disambiguated variables and properties
    • Extended OVERWRITE to constants and methods

Version 1.5.2

2018-11-05 – Master Puti

  • Report
    • Fixed storage of themes in dump.sqlite
    • Ambassador : report nothing when there are no trait, interface or class in the tree.
  • Analysis
    • New analysis : idn_to_ascii() will get new default
    • New analysis : support for decimal extension
    • New analysis : support for psr extension
    • Upgraded analysis : Extended support to PHP native exceptions
    • Upgraded analysis : Could use typecast now handles intval() second param
    • Upgraded analysis : Variable strange names avoids properties
    • Checked unit tests : 3058 / 3085 test pass (99% pass)
  • Tokenizer
    • Upgraded support for arrays inside strings (string/constant distinction)
    • Added DEFINITION for constant() and defined()
    • Fixed value of line for some placeholder definition

Version 1.5.1

2018-10-29 – Eighteen Arhats

  • Analysis
    • New analysis : could use basename() second args
    • Upgraded analysis : Variables strange names do not report …
    • Checked unit tests : 3061 / 3079 test pass (99% pass)
  • Tokenizer
    • Moved TRAILING as a property
    • Moved NULLABLE as a property
    • Sync ALIAS with AS
    • Fixed link between Use expression when using an alias

Version 1.5.0

2018-10-22 – Pilanpo Bodhisattva

  • Architecture
    • Fixed ” in the examples of the manual
    • Upgraded stability with new history testing
  • Report
    • Ambassador : now report interface and trait hierarchy
    • Ambassador : new format inventory for pack and printf
    • Dump : Fixed list of traits
  • Analysis
    • New analysis : Could Use Try, for native calls that may produce an exception
    • New analysis : idn_to_ascii() will get new default
    • Upgraded analysis : Undefined variables exclude $this
    • Upgraded analysis : Variables used once avoid properties
    • Upgraded analysis : ext/json : JsonException
    • Upgraded analysis : added new PHP 7.3 constants (curl, pgsql, mbstring, standard)
    • Upgraded analysis : scalar or object property now ignore NULL as default
    • Refactored analysis : UsedProtectedMethod
    • Checked unit tests : 3059 / 3071 test pass (99% pass)
  • Tokenizer
    • Handles NaN and INF when the literals reach them
    • Static constant may be variable if object is variable
    • Removed superfluous linking for static calls.

Version 1.4.9

2018-10-15 – Lingji Bodhisattva

  • Architecture
    • Extended documentation with phpVersion, time to fix and severity
    • Upgraded bufixes to PHP 7.2.11
    • Added more tests on arguments in the DSL
    • Removed double definitions for class constants
    • Initial support for extension folder
  • Report
    • Collect the number of local variables, per method
  • Analysis
    • New analysis : report accessing properties the wrong way
    • New analysis : suggest named patterns
    • New analysis : check Pack() arguments
    • New analysis : Return in generators, for PHP 7.0 +
    • New analysis : Repeated interfaces
    • New analysis : Static properties shouldn’t use references until PHP 7.3
    • New analysis : Don’t read and write in the same expression
    • Upgraded analysis : is interface methods, extended to magic methods
    • Upgraded analysis : empty regex
    • Upgraded analysis : never used properties
    • Upgraded analysis : logical operators in letters
    • Upgraded analysis : could use interface, extended with PHP native interfaces
    • Upgraded analysis : Is Zero, better handling of mixed expressions
    • Refactored analysis : Empty functions
    • Refactored analysis : Used Private Methods
    • Checked unit tests : 3036 / 3055 test pass (99% pass)
  • Tokenizer
    • Added DEFINITION between new and __construct
    • Added support for className::class()
    • Added better support for dynamic method calls
    • Added better support for dynamic property calls
    • Removed some usage of TokenIs

Version 1.4.8

2018-10-08 – Ksitigarbha

  • Architecture
    • Adding more validation at DSL step level : stricter check on args, speed gain
    • Cleaning more analysis from MAX_LOOPING variable
    • Better protection for file names
    • Removed static properties from DSL
  • Analysis
    • New analysis : Don’t use __clone before PHP 7.0
    • New analysis : Watch out for filter_input as a data source
    • Upgraded analysis : Method Used Below refactored for speed
    • Upgraded analysis : Undefined class constants now takes into account interfaces
    • Removed anaysis : Relaxed Heredoc was double with Flexible Heredoc
    • Checked unit tests : 3016 / 3033 test pass (99% pass)
  • Tokenizer
    • Build links between methodcall and method in a class
    • Added links between method and its overwritten version in child
    • Fixed fallback for functions
    • Fixed linked between traits and their definition
    • Removed variable definition for Parametername
    • Simplified double usage between return and pushExpression()

Version 1.4.7

2018-10-01 – Maitreya

  • Architecture
    • Added ‘Suggestions’ section to documentation, for many rules
    • WIP : removing usage of MAX_LOOPING in analysis
    • Added a lot of new external services
    • Added documentation for creating a new analysis
  • Analysis
    • Upgraded analysis : No interface was dropped in PHP 7.2
    • Upgraded analysis : IsAMagicProperty extended to parents
    • Removed anaysis : Relaxed Heredoc was double with Flexible Heredoc
    • Checked unit tests : 3017 / 3029 test pass (99% pass)
  • Tokenizer
    • Linking variable in closure’s use to its local variable
    • Removed some unused atoms from GraphElements

Version 1.4.6

2018-09-24 – Dipankara

  • Architecture
    • Various code refactorisations
    • Migration to PHPUnit 7.3.5
    • Fixed filenames case
    • Better handling of VCS
    • More validations for project names
    • More docs
  • Report
    • Ambassador/Weekly : fixed ‘ in analyser titles
  • Analysis
    • Upgraded analysis : Fopen mode accepts ‘r+b’
    • Upgraded analysis : Unused Traits
    • Upgraded analysis : Undefined Variables
    • Checked unit tests : 3020 / 3033 test pass (99% pass)
  • Tokenizer
    • New analysis : report literal used with reference
    • Added support for boolval to Keyvalue
    • Fixed support for boolval to Arraylist
    • Added DEFINITION to static methods
    • Added Variabledefinition for local variables
    • Fixed bug in Not

Version 1.4.5

2018-09-17 – Guanyin Bodhisattva

  • Architecture
    • Removed times() for until() in Dumps
  • Report
    • Manual : added folders tree
  • Analysis
    • New analysis : Add Default To Parameter
    • Upgraded analysis : Avoid reporting PHP function as classes
    • Upgraded analysis : More empty Functions than just foo() {}
    • Upgraded analysis : Wrong Number of argument now takes into account variadic
    • Upgraded analysis : Should Use Constant now encompasses () and ?: structures
    • Upgraded analysis : This Is Not An Array now takes ArrayObject/SimpleXmlElement into account
    • Checked unit tests : 3009 / 3020 test pass (99% pass)
  • Tokenizer
    • Fixed ‘constant’ status with Arrayliteral
    • Fixed bug where strings are build close to the end of the script

Version 1.4.4

2018-09-10 – White Dragon Horse

  • Architecture
    • Doctor reports the set of tokens used
    • Lots of docs checks
  • Report
    • Ambassador / Phpconfiguration : report disable_functions and disable_classes
    • Finished Weekly report
  • Analysis
    • New analysis : report ext/seaslog
    • Upgraded analysis : Incompatible signatures
    • Fixed DSL : analysisIs
    • Checked unit tests : 3000 / 3010 test pass (99% pass)
  • Tokenizer
    • Closure are now processed with runplugin
    • Removed depencencies to usedClasses
    • Fixed detections of Closure at the end of a script

Version 1.4.3

2018-09-03 – Sha Wujing

  • Architecture
    • No error if missing svn
    • Extended ‘First’ thema
    • Now reporting PHP native CIT, constants and functions
  • Report
    • Ambassador : php.ini suggestions includes disable_functions
  • Analysis
    • New analysis : report typecasting for json_decode
    • New analysis : report classes that could be final
    • New analysis : simplify closure into callback
    • New analysis : report inconsistent elseif conditions
    • Upgraded analysis : Reduced false positive on Type/Default mismatch
    • Upgraded analysis : Drop Else After Return uses elsif
    • Upgraded analysis : Unused Private Property (rare)
    • Checked unit tests : 2990 / 3004 test pass (99% pass)
  • Tokenizer
    • Removed extra Void after function definitions
    • Fixed fullnspath with define()

Version 1.4.2

2018-08-27 – Zhu Bajie

  • Architecture
    • Fixed leftover bugs in the new DSL language
    • Adopter Query in LoadFinal (first test)
    • Extended support for clone type 1
  • Report
    • New Report : Weekly report
  • Analysis
    • New analysis : report forgotten conflict in traits
    • New analysis : undefined insteadof
    • New analysis : undefined variable
    • New analysis : report classes that must call parent::__construct
    • Upgraded analysis : Inexistant Compact variable
    • Upgraded analysis : Test class was refactored
    • Checked unit tests : 2975 / 2989 test pass (99% pass)
  • Tokenizer
    • New atom : Staticmethod, for Insteadof (replacing ‘Staticconstant’)
    • Added DEFINITION link for array(‘class’, ‘method’) structure

Version 1.4.1

2018-08-20 – Tang Sanzang

  • Architecture
    • Spined off Query for Gremlin, with Exakat DSL.
    • Centralized ‘methods’ property in Analysis class
    • Extended MAX_LOOPING usage
  • Analysis
    • Added new thema : Class Review
    • Upgraded analysis : Defined Parent MP (less queries)
    • Upgraded analysis : Less false positives
    • Added support for PHP 7.2.9
    • Checked unit tests : 2965 / 2980 test pass (99% pass).
  • Tokenizer
    • Fixed Edge case with Ternary and Boolean
    • Added Staticpropertyname to distinguish from variables
    • Added support for remote definitions to methods
    • Removed global path for CIT (no fallback)

Version 1.4.0

2018-08-13 – Sun Wu Kong

  • Architecture
    • Chunked result inserts for Dump
    • More support for PHP 7.4
  • Report
    • Ambassador : added new Appinfo for relaxed Heredoc, trailing comma…
  • Analysis
    • New analysis : class can be abstract
    • New analysis : trailing comma
    • New analysis : relaxed heredoc
    • New analysis : removed functions in PHP 7.3
    • New analysis : continue versus break
    • Upgraded analysis : Hardcoded passwords is extended to objects
    • Checked unit tests : 2964 / 2979 test pass (99% pass).
  • Tokenizer
    • Measure definitions stats for classes.
    • Added support for relaxed heredoc
    • Added support for closure as a return value
    • Refactored support for Ternary and Labels

Version 1.3.9

2018-08-06 – Du Ruhui

  • Architecture
    • Added support for PHP 7.4
    • ‘Copy’ won’t update anymore
  • Report
    • Ambassador : fixed repeated ‘compatibility’ menu entry
  • Analysis
    • New analysis : avoid __CLASS__ and get_called_class().
    • New analysis : prepare for (real) deprecation
    • New analysis : const / define preference
    • New analysis : define case sensitivity preference
    • New analysis : avoid defining assert() in namespaces
    • Removed analysis : Variables/Arguments
    • Checked unit tests : 2957 / 2971 test pass (99% pass).
  • Tokenizer
    • Removed Noscream – AT atom
    • Added definition for class constants
    • Fixed bug : can’t apply ~ to false
    • Extended DEFINITION support to closure’s use and references

Version 1.3.8

2018-07-30 – Fang Xuanling

  • Architecture
    • ‘Copy’ won’t update code anymore.
  • Analysis
    • Upgraded analysis : ‘should use operator’ only applies to constant chr() call
    • Upgraded analysis : Useless Instructions is faster
    • Checked unit tests : 2948 / 2962 test pass (99% pass).
  • Tokenizer
    • Added support for variable definitions in methods

Version 1.3.7

2018-07-16 – unnamed demon

  • Architecture
    • Fixed handling of multiple updates
  • Report
    • More documentations
  • Analysis
    • New analysis : report usage of callback to process array
    • New analysis : report usage of case insensitive constants
    • Upgraded analysis : Hardcoded passwords is extended to objects
    • Upgraded analysis : Go To Key Directly handles comparisons
    • Added support for PHP 7.0.20
    • Checked unit tests : 2948 / 2962 test pass (99% pass).

Version 1.3.6

2018-07-16 – Zhang Gongjin

  • Architecture
    • Added support for Rar archives
    • Removed call to gremlin server at ‘status’ time
  • Analysis
    • New analysis : support for msgpack extension
    • New analysis : support for lzf extension
    • Upgraded analysis : added missing function names in several extensions
    • Checked unit tests : 2941 / 2955 test pass (99% pass).

Version 1.3.5

2018-07-09 – Gao Shilian

  • Architecture
    • Removed 4 unused exceptions
    • Extracted Query from Analysis
  • Report
    • Reports : centralized all doc reading
    • Reports : doc reading now parses sections (avoid overlap)
    • Ambassador : Added exakat version and build to dashboard.
    • Ambassador : Added Class Tree (All class hierarchies)
  • Analysis
    • Fixed bug with ‘last’ and ‘2last’
    • New analysis : Report undefined::class
    • New analysis : Report returned assignations as useless
    • New analysis : Split scalar typehint by versions
    • Upgraded analysis : Extended Reuse Variable to instantiations
    • Upgraded analysis : Masking parenthesis are only for referenced arguments
    • Upgraded analysis : Wrong case doesn’t apply to parent/static/self
    • Upgraded analysis : Locally Unused Properties are extended to traits
    • Upgraded analysis : Should Preprocess is extended to concatenations
    • Upgraded analysis : Array_key_fill exclude variables by default
    • Upgraded analysis : Ambiguous static reports the whole property definition
    • Checked unit tests : 2919 / 2944 test pass (99% pass).
  • Tokenizer
    • Added missing constants
    • Fixed support for goto true;
    • Fixed edge case for nested ternaries and boolean
    • Moved Goto and Label to Name Atom

Version 1.3.4

2018-07-02 – Cheng Yaojin

  • Architecture
    • Added check when unarchiving tar.gz and tar.bz
    • Added check for neo4j installation, (error grabing)
    • Moved Upgrade to tmp folder
  • Analysis
    • Parameters are actually defined in the class
    • New analysis : ambiguous visibilities of properties
    • New analysis : report usage of PHP 7.1+ hash algorithm
    • New analysis : csprng (random_bytes and random_int)
    • New analysis : ext/libeio
    • New analysis : report incompatible signatures for methods
    • Upgraded analysis : Unused Private Methods handles fluent interfaces
    • Upgraded analysis : Defined Parent keyword
    • Upgraded analysis : Recursion
    • Refactored codeIs/codeIsNot
    • Checked unit tests : 2908 / 2923 test pass (99% pass).
  • Tokenizer
    • Added support for ‘parent’ definitions
    • Fixed element counts in concatenation
    • Fixed operator priority in Strval
    • Upgraded handling of undefined constants to string

Version 1.3.3

2018-06-25 – Ma Sanbao

  • Architecture
    • Better handling of fallback to global for functions
    • Weekly code clean
    • Refactored several analysis for speed
  • Report
    • Ambassador : fixed regression in the dashboard
    • Fixed edge case with properties
  • Analysis
    • New analysis : closure that can be static
    • Upgraded analysis : empty function doesn’t count static or global
    • Upgraded analysis : reported globals include $GLOBALS also
    • Checked unit tests : 2881 / 2911 test pass (98% pass).
  • Tokenizer
    • Moved collection of functioncall to LoadFinal
    • Added collection of interfaces and newcall
    • Moved Declare to its own token
    • Moved Property definitions to its own token

Version 1.3.2

coming up – Duan Zhixian

  • Architecture
    • Reading stats from store, not graph.
    • Git now fails silently if login is requested at clone / pull
  • Report
    • New analysis : == or === favorites
    • New analysis : > or < favorites
    • Upgraded analysis : written only variables is now faster
    • Upgraded analysis : PHP reserved words has now 2 parameters
    • Removed analysis : Type/Integer, Real, Closures.
    • Checked unit tests : 2901 / 2914 test pass (99% pass).
  • Tokenizer
    • Static, PPP, Final and Abstract are now properties
    • Fixed regex in several rules
    • Added support for code clone detection (WIP)

Version 1.3.1

2018-06-03 – Liu Hongji

  • Architecture
    • Cleaned code of unused classes and ;
    • Fixed connexion script to the database
    • Fixed check of php.log folder
  • Report
    • Ambassador : display correct compilation state
  • Analysis
    • Upgraded analysis : used constant is also applied to defined()
    • Upgraded analysis : used protected methods is case insensitive
    • Upgraded analysis : Empty class omits extended classes
    • Upgraded analysis : More sequences to SimplePreg
    • Upgraded analysis : Throwable is not ‘unthrown’ anymore
    • Removed analysis : Static CPM
    • Checked unit tests : 2901 / 2914 test pass (99% pass).
  • Tokenizer
    • Upgraded support for ::class

Version 1.3.0

2018-06-03 – Xue Rengui

  • Architecture
    • Added support for Tinkergraph 3.3.3
    • Handles situations where exakat has no database
    • Check for PHP version at bootstrap
  • Report
    • Ambassador : Updated PHP recommendation report with PHP 7.3
    • All : Variables don’t sport … nor & anymore
  • Analysis
    • New analysis : Single Use Variable
    • New analysis : Should Use Operator
    • New analysis : Check JSON production
    • New analysis : Report visibility usage with constants
    • Upgraded analysis : used constant is also applied to defined()
    • Upgraded analysis : used protected methods is case insensitive
    • Upgraded analysis : used directives handle function version
    • Upgraded analysis : added lcg_value for better rand
    • Upgraded analysis : Use Nullable extended to methods, closures.
    • Upgraded analysis : Fixed support for ‘_’ native function
    • Checked unit tests : 2895 / 2907 test pass (99% pass).

Version 1.2.9

2018-05-28 – Wang Gui

  • Architecture
    • Removed query cache from gremlin
    • Added pre-query check to prevent queries that have no chance of result
  • Report
    • Ambassador : first 50% of documentation fix : double quotes are not well displayed
    • Ambassador : Results are ordered by files, then by lines
  • Analysis
    • New analysis : Flexible Heredoc syntax
    • New analysis : Non-compatible methods
    • New analysis : Use the Blind Var
    • New analysis : Inexistant Compact
    • New analysis : Typehint / default value mismatch
    • Upgraded analysis : strict_types are not recognized as undefined constant
    • Upgraded analysis : More new methods for PHP 7.3
    • Upgraded analysis : Dependant traits
    • Upgraded analysis : Strpos comparison
    • Upgraded analysis : Method Must Return
    • Checked unit tests : 2885 / 2889 test pass (99% pass).
  • Tokenizer
    • Interface may have const, not traits (Loading)
    • Added support for static call to methods

Version 1.2.8

2018-05-21 – Xu Jingzong

  • Architecture
    • Implemented a cache for speed boost.
    • Refactored files finding method
    • Git VCS always submit a user when cloning (using exakat by default)
    • Moved custom themes from themas.ini to themes.ini
  • Report
    • Ambassador : fixed naming the audit
    • Ambassador : added ‘Dead code’ section
    • Doctor : split themes display (default/customs)
  • Analysis
    • New analysis : Report what should be done in SQL
    • New analysis : Typehinted reference
    • New analysis : Strpos doing too much work
    • New analysis : Can’t instantiate class
    • Upgraded analysis : Don’t echo error
    • Upgraded analysis : PPP Declaration style
    • Upgraded analysis : Useless abstract class
    • Upgraded analysis : Buried assignation doesn’t report declare anymore
    • Upgraded analysis : Abstract methods are not reported as unused
    • Upgraded analysis : relaxed version constraint for all Extensions/*
    • Checked unit tests : 2852 / 2856 test pass (99% pass).
  • Tokenizer
    • Fixed handling of short_open_tags
    • Fixed edge case with %

Version 1.2.7

2018-05-14 – Li Yuanji

  • Architecture
    • Extended status command to all VCS
    • Added support for customized themes
    • Added Upgrading section, List of parametrized analysis, revamped summary
    • Simplified handling of commandline options
    • Removed usage of JSON for ‘doctor’
  • Report
    • A lot more documentation, examples, links.
    • Optimized type downloader
    • Added report themes pre-requisites
  • Analysis
    • New analysis : ext/cmark
    • Upgraded analysis : too many children is configurable
    • Upgraded analysis : error_reporting 0 and -1 are not reported as issues.
    • Checked unit tests : 2835 / 2839 test pass (99% pass).
  • Tokenizer
    • Fixed bug where constant self referenced.
    • Moved Identifiers to Names
    • Added first definitions for members.

Version 1.2.6

2018-05-07 – Li Jiancheng

  • Architecture
    • Moved more classes to helpers
    • Removed constants for Tokens
    • Upgraded to Robo 1.2.3
  • Report
    • Added support for custom themas for reports.
  • Analysis
    • New analysis : zookeeper
    • New analysis : Report missing parenthesis
    • New analysis : Report invalid interval checks
    • New analysis : Suggest array_unique when possible
    • New analysis : Report when callback needs a return
    • New analysis : Reduce the number of if
    • Updated Exception list, up to PHP 7.3
    • Upgraded analysis : Printf Arguments
    • Upgraded analysis : Count On Null
    • Upgraded analysis : Regex on Collector
    • Upgraded analysis : File Inclusion wrong case handles parenthesis
    • Upgraded analysis : Make globals a property
    • Upgraded analysis : Invalid regex
    • Checked unit tests : 2814 / 2818 test pass (99% pass).
  • Tokenizer
    • Added definition links for staticmethodcalls.
    • Added boolean and int values to __DIR__ and co.
    • Removed several static properties
    • Fixed precedence of instanceof
    • Added support for Null val

Version 1.2.5

2018-04-30 – Li Yuan

  • Architecture
    • Added command ‘config’ to configure project from commandline
    • Made Exakat reentrant
    • Moved Configuration creation to external file
    • Upgraded status when audit isn’t run yet
  • Analysis
    • New analysis : Regex on Collector
    • Upgraded analysis : Only Variable with reference argument
    • Upgraded analysis : File Inclusion Wrong Case
    • Upgraded analysis : Invalid Regex
    • Added support for PHP 7.2.5, 7.1.17 and 7.0.30
    • Checked unit tests : 2802 / 2809 test pass (99% pass).
  • Tokenizer
    • Fixed various bugs with constant scalar expression

Version 1.2.4

2018-04-23 – Li Chunfeng

  • Architecture
    • Now fail with explicit message for memory running out
  • Report
    • Ambassador : Updated ‘confusing variables’ report
  • Analysis
    • Upgraded analysis : Could be short assignment
    • Upgraded analysis : Could be static
    • Upgraded analysis : Fail Substr Comparison (handles constants)
    • Checked unit tests : 2796 / 2801 test pass (99% pass).
  • Tokenizer
    • Added propagation of constants when value can be processed
    • Introduced ‘Parameter’ token, to differentiate with Variable
    • Fixed syntax highlighting
    • Fixed a bug with negative bitshift

Version 1.2.3

2018-04-16 – Yuan Tiangang

  • Architecture
    • New append for logs
  • Report
    • New report : Manual.
    • Ambassador : Rewrote the export of ‘confusing variables’
  • Analysis
    • New analysis : report strtr bad usage
    • New analysis : don’t unset properties
    • Upgraded analysis : Invalid Regex
    • Upgraded analysis : Property Could Be Local
    • Upgraded analysis : No Hardcoded path
    • Upgraded analysis : echo/print preferences also report printf
    • Removed analysis : Close Naming (now done at Report level)
    • Checked unit tests : 2770 / 2786 test pass (99% pass).
  • Tokenizer
    • Removed double definition for functioncalls

Version 1.2.2

2018-04-09 – Yin Kaishan

  • Architecture
    • Cleaned doctor so it works even without requirements
    • Fixed special chars with git URL
  • Report
    • Ambassador : new inventory with classes changes in heritage
    • Ambassador : new inventory of large expressions
    • Upgraded report : Defined Exceptions are cleaned of doubles
  • Analysis
    • New analysis : report Redefined Private Properties
    • New analysis : report substr() usage with strlen
    • Upgraded analysis for Inclusion Wrong Case filenames
    • Upgraded analysis : Cast To Boolean is extended to True/False
    • Upgraded analysis : Omit negative lengths
    • Upgraded analysis : interface search also include parameter counts
    • Upgraded analysis : Failed Substr Comparison handles special chars
    • Upgraded analysis : Identical consecutive omits arrays
    • Checked unit tests : 2757 / 2775 test pass (99% pass).

Version 1.2.1

2018-04-02 – Fu Yi

  • Architecture
    • Fixed generation of analysis logs
    • Fixed doctor, which wouldn’t diagnostic the absence of needed extensions
  • Report
    • More real-life examples in docs
  • Analysis
    • New favorites : property declaration unique or multiples ?
    • New analysis : $a = +$b;
    • New analysis for Melis : Regex check and Route constraints
    • Upgraded analysis : Constant used below
    • Checked unit tests : 2760 / 2766 test pass (99% pass).
  • Tokenizer
    • Fixed counts in property declarations
    • Fixed final new lines in heredoc/nowdoc

Version 1.2.0

2018-03-26 – Xiao Yu

  • Architecture
    • Upgraded concurrency with analysis
    • Replaced $_SERVER[‘_’] by PHP_BINARY
    • Removed old code (> 1.0.0)
    • Adopted ‘stable’ version for progressbar
    • Fixed loading with Bazaar
    • Added support for Parametrized analysis
    • Better initial configuration with doctor
  • Report
    • Ambassador : upgraded analysis settings table
  • Analysis
    • New analysis : Report Private functions for WordPress
    • New analysis : Suggest simplifying chr(123);
    • New analysis : Too many native calls
    • Updated analysis : fallthrough are not reported with die
    • New Theme : Random
    • Collecting more stats for classes.
    • Checked unit tests : 2758 / 2741 test pass (99% pass).
  • Tokenizer
    • Upgraded support for Heredoc

Version 1.1.9

2018-03-19 – Qin Qiong

  • Architecture
    • Better documentation for reports
    • Adding Real Code examples to documentation
    • Refactored Config reading
    • Moved more VCS information to its own class
  • Report
    • Upgraded report : Ambassador reports the number of parameters in methods
    • New report : favorites (spin-off from Ambassador)
    • Upgraded report : Inventories also covers Dateformat, Regex, Sql, Url, Email, Unicode Blocks.
  • Analysis
    • New analysis : too many parameters
    • New analysis : report mass creation of arrays
    • Checked unit tests : 2755 / 2738 test pass (99% pass).

Version 1.1.8

2018-03-12 – Yuchi Gong

  • Architecture
    • Reduced cache when running analysis
    • Fixed order of analysis
  • Report
    • Ambassador : fixed faceted search problems
    • Codacy : added codacy-style report
  • Analysis
    • New analysis : support for IBM db2, leveldb
    • New analysis : should use count’s second argument
    • Upgraded analysis : Randomly sorted arrays
    • Checked unit tests : 2749 / 2731 test pass (99% pass).
  • Tokenizer
    • Fixed edge case where die is an argument
    • Fixed edge case where Yield returns a array

Version 1.1.7

2018-03-05 – Xu Maogong

  • Architecture
    • Removed most static in Analysis
  • Report
    • New format : All, that produces all reports
    • Ambassador : new report estimates fitting PHP version
    • Ambassador : report enable_dl in configuration
  • Analysis
    • New analysis : report dynamic library loading
    • New analysis : suggest array_fill_keys()
    • New analysis : PHP 7.3 optional last argument
    • New analysis : added support for xxtea, opencensus, varnish, uopz
    • Upgraded BugFixes report to PHP 7.2.3
    • Updated analysis : ext/cairo has new functions
    • Updated analysis : PHP 7.3 new functions
    • Removed analysis : NullCoalesce (double)
    • Checked unit tests : 2743 / 2731 test pass (99% pass).
  • Tokenizer
    • Moved ‘constant’ to plugins
    • Fixed bug when updating with HG

Version 1.1.6

2018-02-26 – Wei Zheng

  • Architecture
    • Created ‘First’, a recipe of initial analysis
    • Prepared installation for compose
  • Report
    • Restored ‘INLINE’ results
    • New reports : Stats
    • Collect PHP native function cool
  • Analysis
    • New analysis : report suggest compact instead of array
    • New analysis : list with references (PHP 7.3+)
    • New analysis : report situation where check is done on non-cast value
    • New analysis : foreach( $array as $o -> $v) as error prone
    • Handle cases where PHP regex are not compilable anyway
    • Checked unit tests : 2732 / 2722 test pass (99% pass).
  • Tokenizer
    • Propagate constant concatenation values.
    • Fixed calculation of intval
    • Refactored Configuration readers
    • Fixed bug when calculating __METHOD__

Version 1.1.5

2018-02-19 – Li Shimin

  • Architecture
    • Refactored all reports
    • Removed outdated Devoops report
  • Report
    • Upgraded BugFixes report to PHP 7.2.2
    • Ambassador : generates a list of confusing variables
    • New report : OWASP
  • Analysis
    • New analysis : Use Math
    • New analysis : Extensions ext/hrtime
    • New analysis : Possible Infinite Loops
    • Upgraded analysis : addZero, Multiply by one supports new situations
    • Upgraded analysis : added microtime, uniqid .. to better rand.
    • Checked unit tests : 2719 / 2724 test pass (99% pass).
  • Tokenizer
    • Fixed check on script compilation that was too strict.
    • Fixed internal assert()
    • Exported VCS to separate classes
    • Refactored load with 3 separate plugins : intval, noDelimiter, booval

Version 1.1.4

2018-02-12 – The Great White Turle

  • Architecture
    • Build concatenation values in scalar constante expression.
    • Upgraded export of file dependencies values
  • Report
    • Ambassador : fixed duration of audit.
    • Composer : provides a full list of depend extensions
  • Analysis
    • New analysis : Report useless catch
    • New analysis : suggest using array_search / array_keys instead of foreach
    • New analysis : double array_flip is slow
    • New analysis : Suggest using cached values
    • New analysis : Functions that fallback to global namespace
    • Upgraded analysis : Encoded letters supports leading 0 in unicode codepoint
    • Upgraded analysis : Variable strange names now report 3 identical consecutive letters
    • Upgraded analysis : Upgraded support to __dir__
    • Checked unit tests : 2716 / 2711 test pass (99% pass).
  • Tokenizer
    • Fixed definitions link for functions

Version 1.1.3

2018-02-05 – The fairy Su’e

  • Report
    • Fixed Ambassador : the favorites weren’t displayed.
  • Analysis
    • New analysis : Report useless references
    • New analysis : Melis configuration : Undefined configuration array
    • New analysis : Melis configuration : make string.
    • Upgraded analysis : Parent first
    • Checked unit tests : 2700 / 2695 test pass (99% pass).
  • Tokenizer
    • Better handling of Labels.
    • Fixed edge case where class and constants where mistaken one for the other

Version 1.1.2

2018-01-29 – Jade Rabbit Spirit

  • Architecture
    • Upgraded docs to tinkergraph 3.2.7
  • Analysis
    • New analysis : Report missing included files
    • New analysis : ZF3 : No Echo Outside a View.
    • New analysis : Local Global variable : report variable that looks global but are not
    • Upgraded analysis : Directive names are check with case sensitive analysis
    • Checked unit tests : 2687 / 2693 test pass (99% pass).
  • Tokenizer
    • Magic Constant hold their actual value
    • Fixed Fullnspath for constants (case sensitive)
    • Fixed edge case with exit and die
    • Fixed edge case with exit and die and -1

Version 1.1.1

2018-01-22 – Wood Xie of Dipper

  • Architecture
    • Fixed path when calling exakat from outside its install folder
    • First analysis for Melis Framework
    • Optimized dictionary collection
  • Report
    • Ambassador : upgraded graph for class sizes
  • Analysis
    • New analysis : report case problems with includes
    • New analysis : Melis framework
    • New analysis : inventory of view properties for Zend Framework
    • New analysis : report view files for Zend Framework
    • Upgraded analysis : + is accepted as regex delimiter
    • Upgraded analysis : same condition searches inside blocks
    • Checked unit tests : 2665 / 2671 test pass (99% pass).
  • Tokenizer
    • Magic constants __DIR__ and __FILE__ get their actual value in noDelimiter
    • Created Eval atom
    • Removed ‘Name’ token for echo, print, die, exit.
    • Upgraded handling of constant names inside strings
    • Removed a bug when storing dictionary.

Version 1.1.0

2018-01-15 – Wood Dragon of Horn

  • Architecture
    • Replaced ‘code’ property with a dictionary
  • Tokenizer
    • Introduced ‘Magicmethod’ for Magic methods in class
    • Fixed a bug when ‘ is in file path
    • Fixed a bug when several raw HTML are in a PHP script.

Version 1.0.11

2018-01-08 – Wood Dragon of Well

  • Architecture
    • Added assertion for property name.
  • Report
    • Ambassador : Added report of classes’s size.
    • Fixed missing audit end’s time.
  • Analysis
    • New analysis : Sqlite3 doesn’t escape “
    • Upgraded analysis : Strange names also report qqqq sequences in variable names
    • Checked unit tests : 2617 / 2657 test pass (99% pass).
  • Tokenizer
    • Fixed fullnspath handling for constants (case insensitive for the constant name)

Version 1.0.10

2018-01-01 – Wood Wolf of Legs

  • Architecture
    • Fixed Sqlite3 escaping error : use ‘, not “
  • Report
  • Analysis
    • Upgraded analysis : ? is possible as delimiter
    • Analysis works better with nested structures
    • Checked unit tests : 2601 / 2649 test pass (99% pass).
  • Tokenizer
    • First plugin for Load Task.
    • Upgraded support for define-d constant.
    • Introduced Phpvariable
    • Fixed scoping with array index.

Version 1.0.9

2017-12-25 – King of Dust Protection

  • Report
    • Ambassador : list complex expressions.
    • Dump : added function inventory
    • Dump : added begin and end line for structures.
  • Analysis
    • New analysis : report reference error with Ternary operator
    • New analysis : report Undefined classes in WordPress.
    • Upgraded analysis : preg option E, tighter regex.
  • Tokenizer
    • Better handling of long path name. TBC.
    • Introduced Parent, Static, Self, Exit, Echo, Print.

Version 1.0.8

2017-12-18 – King of Heat Protection

  • Architecture
    • Doctor reports memory_limit and JAVA_OPTIONS/JAVA_HOME
    • Made database restart more portable
    • Added spell checking on docs
  • Report
    • Ambassador : Regex inventory added
    • Ambassador : Largest expressions reported
  • Analysis
    • New analysis : report identical operands on both sides of operator
    • New analysis : report potentially mistaken concatenation in array
    • New analysis : report mistaken scalar typehint
    • New analysis : report undefined classes by symfony version
    • New analysis : report undefined classes by wordpress version
    • Upgraded analysis : Interfaces are also reported from return typehint
    • Upgraded analysis : Mistaken concatenation got rid of various false-positives
    • Checked unit tests : 2601 / 2633 test pass (99% pass).
  • Tokenizer
    • Isset, Empty, Phpvariables now have their own atom.
    • Fixed edge case with $ token
    • Fixed Constant fqn building
    • UTF-8 protection for propertyname

Version 1.0.7

2017-12-11 – King of Heat Protection

  • Architecture
    • Added /var to default omitted folders
  • Analysis
    • New analysis : should use array_filter.
    • New analysis : ext/igbinary
    • Checked unit tests : 2533 / 2599 test pass (97% pass).
  • Tokenizer
    • Fixed

Version 1.0.6

2017-12-04 – Fuli

  • Architecture
    • Refactored description
    • Moved PHPsyntax to a function
  • Analysis
    • New analysis : Never used parameter.
    • New analysis : always use named boolean parameters
    • Upgraded analysis : unused arguments
    • Checked unit tests : 2573 / 2585 test pass (99% pass).
  • Tokenizer
    • Added new token : This for $this
    • Updated loader to handle PHP 7.3 functioncall syntax (final ,)
    • Turned Markcallable into an independant analysis

Version 1.0.5

2017-11-27 – King of Cold Protection

  • Architecture
    • Configured Exakat for Tinkergraph 3.3. Still unfinished.
    • Documentation now has an external link to extensions.
  • Report
    • Ambassador : added more inventories : URL SQL, email, GET index, MD5, Mime
  • Analysis
    • New analysis : parent first
    • New analysis : Report uncommon Environment Vars
    • New analysis : Report invalid Regex
    • New analysis : Report contatenation in Zend DB
    • Fixed analysis : Deprecated Functions
    • Fixed analysis : Unknown PCRE2 option
    • Upgraded analysis : hardcoded password
    • Upgraded analysis : array_merge in loops
    • Upgraded analysis : substr() first. Handle following expressions
    • Refactored analysis : Used Functions
    • Refactored analysis : Add Zero
    • Checked unit tests : 2573 / 2585 test pass (99% pass).
  • Tokenizer
    • Fixed a bug that linked functions and definitions

Version 1.0.4

2017-11-20 – Boxiang Demon

  • Architecture
    • PhpExec, get only path to binary.
    • Cleaned docs of double links
    • Cleaned code
  • Report
    • Added libsodium, Argon2 to Crypto; DL() usage to PHP.
    • Compatibility report only focuses on backward incompatibilities.
    • New recipes will cover ‘suggestions for better code’. Coming up.
  • Analysis
    • New analysis : ” string is better than ‘ (sorry…)
    • New analysis : PHP 7.3’s PCRE 2
    • New analysis : report missing ‘new’ in front of class name.
    • New analysis : use is_object instead of is_resource for ext/hash
    • New analysis : report non-countable calls
    • New analysis : report DL usage in Appinfo
    • New analysis : slice first, then map arrays.
    • New analysis : Avoid 5th argument in PHP 7.2 for set_error_handler
    • New analysis : avoid null with get_class()
    • New analysis : suggest using list() with foreach instead of arrays
    • New analysis : avoid using $this as argument in constructor
    • New analysis : Report usage of ext/vips
    • New inventory : GPC variables
    • Updated analysis : Use Class Operator doesn’t report methods names anymore
    • Updated analysis : Long argument size is raised to 60 chars
    • Updated analysis : ignore when missing break is in last case
    • Updated analysis : Use This ignores ‘self’.
    • Updated analysis : Randomly sorted Arrays ignores arrays of 3 or less.
    • Updated analysis : ext/mcrypt gets its constants
    • Updated analysis : more strange names being used in code
    • Updated analysis : more PHP 7.2 removed functions
    • Checked unit tests : 2563 / 2572 test pass (99% pass).
  • Tokenizer
    • Reduced duplicated that may lead to loading error.

Version 1.0.3

2017-11-13 – Baize Demon

  • Architecture
    • Fixed driver Tinkergraph, which was not setting the right ids.
    • Doctor now reports $JAVA_OPTIONS, in case one need to allocate more memory
    • Doctor now reports token limit
    • Moved config.ini creation to first phase of init.
    • Fixed collect of error when init with git.
    • Upgraded driver gremlin-php to 3.0.2
  • Report
    • Ambassador : Now reports the namespaces as a tree.
    • New analysis : report members that are static and not.
    • Updated analyzis : normal method called statically.
  • Analysis
    • Added support for Drupal, FuelPHP and Phalcon.

Version 1.0.2

2017-11-06 – Suanni Demon

  • Architecture
    • Better report of error messages from VCS.
    • Updated support for Vagrant
  • Report
    • Ambassador : Fixed display for ‘Callback’
  • Analysis
    • New analysis : substr() first, then replace.
    • New analysis : report double prepare (WP).
    • New analysis : avoir the +1 month trap
    • New analysis : check for printf() options
    • New analysis : check for placeholder in prepare (WP)
    • New analysis : avoid direct injection into prepare (WP)
    • New analysis : performance recommendation for switch.
    • New analysis : merge if/if into if/then/else
    • Checked unit tests : 2500 / 2536 test pass (99% pass).

Version 1.0.1

2017-10-30 – Xueshi Demon

  • Architecture
    • Created Result class for Graphdb results
    • Docker image is updated with version 1.0.1
    • Vagrant files are updated with version 1.0.1
    • Preparing support for Gremlin 3.3.0
  • Report
    • Added support for PHP 7.1.11 and 7.0.25
  • Analysis
    • New analysis : could be else (for consecutive opposite if/then)
    • Checked unit tests : 2517 / 2527 test pass (99% pass).

Version 1.0.0

2017-10-23 – Roushi Demon

  • Architecture
    • Tested on Gremlin 3.2.6. Checked Gremlin 3.3.0, but it needs more work.
    • Upgraded doctor for installation and report.
    • Upgraded docs to set gremlin-server as default install.
  • Report
    • Added support for Clang-style report.
    • Ambassador : fixed link to exception Tree.
    • Inventories : Date format,
    • Audit names are reported in every Ambassador-style report.
  • Analysis
    • Upgraded PHP directive list.
    • Functions In For loop : prevent issue if the function uses a loop variable.
    • Useless instruction : do not report return $i++ if $i is reference
    • Useless instruction : Avoir reporting properties when they are magic
    • New analysis : mark properties to be magic.
    • Upgraded list of PHP logins, to report hard coded passwords.
    • Upgraded close naming : variables that differ with 1 chars are reported.
    • Added assert(false…) to list of branching syntax.
    • Checked unit tests : 2515 / 2525 test pass (99% pass).

Version 0.12.16

2017-10-16 – Tawny Lion Demon

  • Report
    • Beta version for Drill Instructor
    • Upgraded Inventories report with Sessions, Cookies, Incoming variables
  • Analysis
    • New analysis : Expression too complex.
    • New analysis : Session Handler must implements SessionUpdateTimestampHandlerInterface
    • New analysis : is Zero : additions that negate some terms
    • New analysis : unconditional loops
    • Upgraded Zend Framework review with latest versions (feed, http, eventmanager…)
    • Upgraded ‘Strange names’ with new typos
    • Upgraded ‘Logical to in_array’ to handle separated comparisons
    • Checked unit tests : 2505 / 2515 test pass (99% pass).
  • Tokenizer
    • Fixed bug with Sign in Additions.

Version 0.12.15

2017-10-09 – Nine Headed Lion

  • Architecture
    • Server : now supports stop, start and restart.
    • Every audit gets a random name, for easy differentiation
    • Added support for PHP 7.3
  • Report
    • Ambassador : list of analysis that report nothing : Good job!
    • Slim report : fixed build
  • Analysis
    • New analysis : file upload names vulnerability check
    • New analysis : variable that may hold different types of date
    • New analysis : always anchor regex
    • Checked unit tests : 2475 / 2480 test pass (99% pass).

Version 0.12.14

2017-10-02 – Grand Saint of Nine Spirits

  • Architecture
    • Support UTF-8 on Gremlin Server (other encoding are not)
    • Better display of vcs updates
  • Report
    • Ambassador : added Security and Performances
    • Ambassador : Upgraded exception presentation
  • Analysis
    • New analysis : report fallthrough in switch
    • New analysis : inventory regex
    • Added support for PHP 7.1.10 and 7.0.24

Version 0.12.13

2017-09-25 – King of the Southern Hill

  • Architecture
    • Code cleaning
  • Report
    • Ambassador : changed display of the audit
  • Analysis
    • Refactored several analysis

Version 0.12.12

2017-09-18 – Ruler of the Kingdom of Miefa

  • Report
    • Ambassador : fixed collect of interfaces and trait names
  • Analysis
    • New analysis : ext/Parle
    • New analysis : help optimize pathinfo() usage
    • New analysis : catch array_values() usage with list and pathinfo()
    • Updated analysis : Don’t show error messages with catch->getMessage();
    • Updated analysis : No concat in loop handles $x = $c . $x;
    • Checked unit tests : 2456 / 2461 test pass (99% pass).
  • Tokenizer
    • Added support for ‘, ” and > in file names. Still missing support for \
    • Restaured fallback to global constants.
    • Fixed special case :

Version 0.12.11

2017-09-11 – Half-Guanyin

  • Architecture
    • Added support options for branches and tags
    • Added support for config in server mode
  • Report
    • Fixed methods dump for interfaces.
  • Analysis
    • Added all analysis to report could be private/protected for
  • Tokenizer
    • Fixed handling of ‘<‘ char in paths

Version 0.12.10

2017-09-04 – Golden Nosed Albino Rat Spirit

  • Architecture
    • Upgraded server version with config alteration features.
    • New generated config-cache
  • Report
    • Fixed property names in Visibility report
  • Analysis
    • Arrays/IsModified : arrays are not modified unless in a (unset)
  • Tokenizer
    • Fixed ‘constant’ for functioncalls
    • Introduced ‘Name’ for Identifier without a fullnspath
    • Added support for branches and tags in init
    • Fixed edge case with $o->$$b

Version 0.12.9

2017-08-28 – Lady Earth Flow

  • Architecture
    • Creates config.cache, with cached calculated configs. Remove to update.
  • Report
    • GraphQL : Upgraded GraphQL report, with relationships.
  • Analysis
    • New analysis : suggest moving for() to foreach()
    • New analysis : shell_exec/exec/`backtick` favorite
    • Update analysis : Abstract Static is for PHP 7.0-
  • Tokenizer
    • Removed Arguments and ARGUMENTS.
    • Finished ‘factory’ from Config.
    • Better handling of long path names.

Version 0.12.8

2017-08-21 – ruler of the Kingdom of Biqiu

  • Analysis
    • New analysis : use foreach, not for()
    • New analysis : ext/fam, ext/rdkafka
  • Tokenizer
    • Fixed edge case where pathnames are too long on OSX.

Version 0.12.7

2017-08-14 – Old Man of the South Pole

  • Architecture
    • Fixed project_vcs when none is used.
  • Analysis
    • Better documentation for in_array replacements and array_unique()
    • Added support for PHP 7.1.8 and 7.0.22

Version 0.12.6

2017-08-07 – White Faced Vixen Spirit

  • Analysis
    • New analysis : no negative for strings before 7.1
    • New analysis : use in_array instead of ||
    • Updated analysis : preg_quote has no delimiter
  • Tokenizer
    • Fixed bug in handling real value for negative numbers

Version 0.12.5

2017-07-31 – White Deer Spirit

  • Architecture
    • Removed config singleton
  • Report
    • New report : simpletables (HTML)
  • Analysis
    • New analysis : report optional parameters
    • New analysis : report concat inside a loop
    • Updated analysis : Could Be Class Constant, when no visibility is provided.

Version 0.12.4

2017-07-24 – peacock Mahamayuri

  • Architecture
    • Optimized performances for large projects (over 2M tokens)
    • Support Neo4j as a driver for Tinkgerpop
  • Report
    • Now covering all PHP 7.2 features
  • Analysis
    • New analysis : Extension xattr
    • New analysis : report ‘object’ as a class name
    • New analysis : No Array for magic property
    • New analysis : suggest reducing code for isset
    • New favorite : and / &&
    • Updated analysis : fetch correct delimiter, even if escaped.
    • Extended coverage for several analysis
    • Removed several nested-subqueries (bad for performances)
  • Tokenizer
    • Tinkergraph/Neo4j : reworked loading data from disk.
    • Added protection for $ in filename

Version 0.12.3

2017-07-17 – Golden Winged Great Peng

  • Architecture
    • Prepared options for several back servers : Tinkergraph, Gremlin-Server/Neo4j, Janusgraph
  • Report
    • New report : Marmelab (GraphQL server)
  • Analysis
    • New analysis : Report when a property is used as object or scalar
    • New analysis : Mismatched Typehint
    • New analysis : Mismatched Default values
    • Upgraded analysis :
    • Fixed a gremlin bug in noAtomInside
  • Tokenizer
    • Added support for trailing comma in group use (PHP 7.2)
    • Fixed building of constants’ values

Version 0.12.2

2017-07-10 – Samantabhadra

  • Architecture
    • Added support for Tinkergraph as graph backend
  • Report
    • Ambassador : reports callback/closures, all 3 declares (ticks, encoding, strict_types)
    • Ambassador : reports strict_types as favorite
    • PlantUML : upgraded report
  • Analysis
    • New analysis : Mismatched ternary branches
    • New analysis : mkdir, by default, uses 777.
    • New analysis : ext/lapack
    • Upgraded analysis : option E for preg_match, refined results
    • Checked unit tests : 2337 / 2366 test pass (99% pass).
  • Tokenizer
    • Added support for Instanceof and GROUPUSE with Nsname

Version 0.12.1

2017-07-03 – Yellow Toothed Elephant

  • Architecture
    • Refactored structures extractions in dump
  • Report
    • New report : PlantUML
    • Ambassador : Appinfo now reports how popular is a feature
  • Analysis
    • New analysis : Const / Define() favorite for constants
    • New analysis : do not return in finally
    • Upgraded analysis : Add Zero was refactored
  • Tokenizer
    • Prepared list of tokens and relations

Version 0.12.0

2017-06-26 – Manjusri

  • Architecture
    • Added support for Janusgraph (Gremlin 3)
    • Refactored dump’s data collection for speed.bb
  • Report
    • Added support for WordPress and Joomla as Frameworks
  • Analysis
    • New analysis : Avoid Optional properties
    • New analysis : Multiple declarations of functions
    • New analysis : Non breakable spaces in names
    • New analysis : Favorite Heredoc delimiter
    • New analysis : ext/swoole
  • Tokenizer
    • Modified several nodes/links names, for compatibility purposes

Version 0.11.8

2017-06-19 – Xiaozuanfeng

  • Architecture
    • Starte working on JanusGraph to add to Neo4j/Gremlin3
  • Report
    • Ambassador : reports Strings encoding and Unicode-block (when available)
    • Ambassador : reports framework founds (first 6, more as we go).
    • Ambassador : reports how frequently an analysis yield results to compare with current situation
  • Analysis
    • New analysis : Classes where declaration order differs from : use, const, properties and methods.
    • New analysis : Could use interface (but implements is missing)
    • New analysis : Cant Inherit Abstract Method (PHP 7.2 upgrade)
    • New analysis : use session_start() options
    • Updated analysis : Dynamica method calls cover {} too
    • Checked unit tests : 2305 / 2305 test pass (100% pass).
  • Tokenizer
    • Checked code on early PHP 7.2 version

Version 0.11.7

2017-06-12 – Long Armed Ape Monkey

  • Report
    • Ambassador : report detected patterns (2 firsts)
    • None report : for when dump is sufficient
  • Analysis
    • New analysis : could factor functioncalls
    • New analysis : PSR-* usage
    • New analysis : support for Judy and Gender extensions
    • Added thema for Compatibility PHP 7.3
    • Added thema for Dependency Injection
  • Tokenizer
    • Fixed edge case where classes starting with ‘namespace’ where mistakenly processed
    • Removed Block from CIT

Version 0.11.6

2017-06-05 – Red Bottomed Horse Monkey

  • Architecture
    • Removed singleton to Config. WIP
  • Report
    • Ambassador : reports usage of PSR 3,6,7,11,13,16.
    • UML : report now protects file names
  • Analysis
    • New analysis : Ext stats
    • New analysis : report mixed concatenation / interpolation strings
    • Updated analysis : htmlentities actually uses combinaison, not alternatives,
    • Updated analysis : Close Tag consistency ignores __HALT_COMPILER files

Version 0.11.5

2017-05-30 – Intelligent Stone Monkey

  • Report
    • Ambassador : fixed visibility suggestion
    • New report : Dependency wheel
  • Analysis
    • New analysis : avoid typehinting with classes
    • New analysis : implemented methods must be public
    • New analysis : no reference on left of assignement
    • New analysis : Could typehint with instanceof
    • Updated analysis : Useless parenthesis cover clone, yield, yield from.
    • Updated analysis : Make One Call also reports nested calls
  • Tokenizer
    • Split functions and closures,
    • Split classes and anonymous classes
    • Split variable with definitions (Property, Static and Global)
    • File count is always reported (even 0)

Version 0.11.4

2017-05-22 – Six Eared Macaque

  • Architecture
    • Results : returns now multiple results at once
  • Report
    • New report : codeflower
    • Ambassador : report usage of Debug functions, browscap
    • Ambassador : omits 0 in donuts
    • Ambassador : faceted search for compatiblity
  • Analysis
    • New analysis : report functions whose return is not used
    • New analysis : only variable can be passed by reference
    • Added limits to all in-depth searches
    • Checked unit tests : 2216 / 2216 test pass (100% pass).
  • Tokenizer
    • Fixed edge case, where return is finished by a close tag
    • Split Variables into Variables, Objects and Arrays.

Version 0.11.3

2017-05-15 – Sun Deity of Mao

  • Architecture
    • Speed up batch processing for lists of analysis
    • Split data collection from the initial dump.
  • Report
    • Ambassador : Upgraded presentation of issues, and internals links.
  • Analysis
    • New analysis : Sphinx extension
    • New analysis : GRPC extension
    • New analysis : reports arrays that are randomly sorted.
    • New analysis : report multiple catch clauses
    • Updated analysis : direct injections include all SERVER_* values
    • Upgrade for PHP 7.1.15 and 7.0.19
  • Tokenizer
    • Split Functioncall into Functioncall, MethocallCall and Newcall.
    • Added support for ‘namespace’ in any full name.

Version 0.11.2

2017-05-08 – Scorpion Demon

  • Architecture
    • Code cleaning, and more stability
  • Analysis
    • New analysis : Report preference between != and <>
    • New analysis : report empty regex and wrong delimiters
    • Added protection for $ in RegexDelimiters

Version 0.11.1

2017-05-01 – Ruler of Women’s Country

  • Architecture
    • Fixed handling for large list of data in gremlin queries
    • Handles static in anonymous classes correctly
  • Report
    • Reports handle traits like class.
  • Analysis
    • New analysis : ends arrays with , or not (favorite)
    • New analysis : suspicious comparison
    • New analysis : strange spaces in strings
  • Tokenizer
    • Arrays are now Arrayliteral, split from Functioncall

Version 0.11.0

2017-04-24 – Immortal Ruyi

  • Architecture
    • Removed prepared statements from loops in dump
    • made Gremlin cache compatible with 32bits platforms
  • Report
    • Ambassador : first work on upgrading visibilities for properties.
  • Analysis
    • New analysis : could use str_repeat()
    • New analysis : Crc32() Might Be Negative
    • Update analysis : Queries in loop reports cubrid and sqlsrv, prepared statements.
    • Update analysis : type mismatch for indices works on constants too.
    • Update analysis : Loop calling covers less ground
  • Tokenizer
    • Split function and method entities for differentiated processing

Version 0.10.9

2017-04-17 – Single Horned Rhinoceros King

  • Architecture
    • File extensions are processed before include/ignore dirs.
    • Reduced number of DEFINITION links, leading to less processing.
    • Added several assertion() in the code
    • Added assertions report in doctor (better leave them out with phar)
  • Report
    • Added support for PHP 7.0.18 and 7.1.4
    • Ambassador : better layout for favorites
    • Zend Framework : 8 new components supported
    • Zend Framework : now supports zendframework/zendframework too
    • Zend Framework : report unused components
  • Analysis
    • New analysis : report nested Use expressions
    • New analysis : report repeated regex (to be federated)
    • New analysis : report code that output directly to std
    • Updated analysis : Should use this now omits overwritten methods
    • New analysis : report overwritten methods
    • Upgraded analysis : 2123 / 2123 test pass (100% pass)

Version 0.10.8

2017-04-10 – King of Spiritual Touch

  • Report
    • Slim report : list of routes used.
  • Analysis
    • New analysis : report Group Use Declaration (PHP 7.0+)
    • Zend Framework : 30 components are now covered.
    • Slim : No echo in route callable and Inventory of routes.
    • PHP : list of new PHP 7.2 functions.
  • Tokenizer
    • Sped up loading time by 10%.
    • Added support for PHP6 binary string : $a = u’b’;

Version 0.10.7

2017-04-03 – Immortal of Antelope Power

  • Report
    • Ambassador : fixed composer report.
    • Added report for Composer (beta phase)
    • Added report for Slim framework.
  • Analysis
    • Added support for Slim versions.
    • Added 10 new components for Zend Framework 3
  • Tokenizer
    • Fixed support for $ in file names.

Version 0.10.6

2017-03-27 – Immortal of Elk Power

  • Architecture
    • Major speed up of loading and analysis
    • Fixed themes configuration.
  • Report
    • Ambassador : report cookies usage, infinite and NAN usage
    • Zend Framework : Report incompatibilites component/version for ZF3
  • Analysis
    • Upgraded analysis : 1941 / 1941 test pass (100.00% pass)
    • New analysis : Zend Framework 3 Deprecated
    • New analysis : Zend cache, view, db.
    • New analysis : Report missing type tests.
    • New analysis : suggest setcookie() with safe arguments
    • New analysis : Do not cast to Int
    • New analysis : CakePHP classes compatibilities from 2.5 to 3.3
    • Upgraded analysis : instanceof doesn’t report traits anymore
    • Upgraded analysis : mb_ereg has options in the 4th arguments
    • Upgraded analysis : more strange names
  • Tokenizer
    • Reviewed most of the load processing.
    • Reduced the number of ‘fullnspath’ properties.

Version 0.10.5

2017-03-13 – Immortal of Tiger Power

  • Architecture
    • Collect graph size in dump.sqlite
    • Collect memory usage in dump.sqlite
    • Now uses the calling PHP version to run all parts of exakat (no config)
    • Doctor report the ran gremlin version.
  • Report
    • Ported the Zend Framework report to ambassador
    • Added regex delimiter in favorites.
    • Ambassador : syntax coloring
  • Analysis
    • New analysis : could be typehinted ‘callable’
    • New analysis : encoded letters in strings for security
    • New analysis : report arguments that may be callable
    • New analysis : report strangely named variables
    • New analysis : report strangely named constants
    • New analysis : too many FindsBy*() methods
    • Updated analysis : Useless Instructions doesn’t report array_merge(_recursive) with one argument
    • Updated analysis : array_replace handles …
    • Updated analysis : 7.2 deprecation with assert()
    • Generalized usage of commons for CIT
    • Added first 4 set of analysis for Zend Framework 3
    • Added support for dynamic new $a[i];
  • Tokenizer
    • Fixed fullnspath with new on functioncall
    • Reduced the number of fullnspath loaded
    • Added support for ‘s'() as functioncall
    • Fixed case where file names has ‘ ‘ in it

Version 0.10.4

2017-03-06 – Dragon King of the West Sea

  • Architecture
    • Ignore some classic files by default (README, LICENSE…)
  • Report
    • Ambassador : protection of HTML values
    • PHPcompilation : fixed export to stdout
  • Analysis
    • New analysis : report useless else branches
    • New analysis : should regenerate session Id, for PHP and Zend Framework
    • Added support for Extension Data structures (ext/ds)
    • Upgraded analysis : Hardcoded Hash
    • Speed up analysis for extensions
  • Tokenizer
    • Fixed edge case where a constant was used inside a ternary operator
    • Fixed processing of labels

Version 0.10.3

2017-02-27 – Dragon King of the Jing River

  • Architecture
    • Added URL glossary to Manual.
    • Extended CS ruleset
    • Use exakat/exakat as user/login for git.
    • New helper to rename analysis
    • Project command now accept -P/-T to run one analysis/Thema directly
  • Report
    • New report style : Codesniffer
  • Analysis
    • New analysis : suggest usage for array_column()
    • New analysis : __DIR__ must be concatenated with a string starting with ‘/’
    • New analysis : report usage of parent, self and static outside a class/trait
    • New analysis : report properties used only in one method
    • New analysis : report properties used only once at all
    • New analysis : multiple aliases per class
    • Updated analysis : Fopen() mode support ‘e’ option (7.1.2 + )
    • Updated analysis : Make One Call covers str_replace, substr_replace, preg_replace*
    • Updated analysis : Unused arguments : now ignores arguments from interface or parent
  • Tokenizer
    • Removed double DEFINITION link. Faster loading, less processing.
    • Fixed an edge case when function name is boolean or null.
    • Cleaned atom and tokens names
    • Fixed edge case when object is instantiated in a ternary

Version 0.10.2

2017-02-20 – Water Lizard Dragon

  • Architecture
  • Report
    • Text format now understand -T, -P to extract only some of the results.
    • Fixed dump of extends.
  • Analysis
    • Added support for PHP 7.1.2 and PHP 7.0.16
    • New analysis : report forgotten ‘throw’ keyword.
    • New analysis : report class / function confusing name
    • Added support for libsodium
    • Upgraded PHP Relaxed Keyword : Ignore properties.
    • Upgraded analysis : 1824 / 1826 test pass (99.9% pass)
  • Tokenizer
    • Fixed a bug that mistakes native PHP classes for functions
    • Fixed rare situation with grouped const/function.

Version 0.10.1

2017-02-13 – King of Wuji Kingdom

  • Architecture
    • Report SVN revision when updating or not.
    • Default reports are in config.
    • Configure now supports include_dirs, to include files.
    • Project name is now noted in datastore.
    • Inventories is a default themas; PHP Compatibility < 5.6 are not default anymore.
  • Documentation
    • Fixed outgoing links
    • Better coverage of PHP functions
  • Report
    • Added ‘Inventories’ report : reports all names and literals
    • Ambassador : Added list of included files, Yield From and classes stats
  • Analysis
    • New Analysis : Strange Names For Methods (Classes/StrangeName)
    • New Analysis : SQL queries (Type/Sql)
    • New Analysis : Avoid Non WordPress Globals (WordPress/AvoidOtherGlobals)
    • Upgraded analysis : Should be single quote, escape sequences refined.
    • Upgraded analysis : Should Preprocess now support determinist PHP functions
    • Upgraded analysis : 1817 / 1824 test pass (99.6% pass)
  • Tokenizer
    • Fixed LOC counting.
    • Fixed edge case when closure is directly use as argument
    • Fixed double inventories for Use’s Definitions

Version 0.10.0

2017-02-06 – Azure Lion

  • Architecture
    • Replacement of booleans with constants (WIP)
    • Removed PHPloc (merged features into load)
    • Added coding standard for Code Sniffer (ruleset.xml)
    • PHP version used default to running script version
    • Now reading Token Constants from the binaries
    • Doctor reports project configuration if -p is used
  • Report
  • Analysis
    • New Analysis : No Boolean As Default
    • New Analysis : Raised Access Level
    • New Analysis : Recommend Wpdb->prepare when variables are in query
    • Directive suggestion now include error_log
    • Upgraded analysis : UselessParenthesis also checks Typehint
    • Upgraded analysis : 1804 / 1811 test pass (99.6% pass)
  • Tokenizer
    • Reinforced detection of parsable PHP script
    • Fixed Files command : it now cleans data before running
    • Removed warning about memory
    • Index creation made lighter

Version 0.9.9

2017/01/30 – Pilanpo Bodhisattva

  • Architecture
    • Moving true/false to constants
  • Report
    • Ambassador : Added ‘Compilation’ and Version compatibility reports.
    • Prepared collection of dependencies in dump
  • Analysis
    • New Thema : Compatibility PHP 7.2
    • New analysis : Deprecated Features of PHP 7.2
    • New analysis : Removed Function for PHP 7.2
    • New preference : New Line Style
    • Upgraded analysis : 1781 / 1802 test pass (98.9% pass)

Version 0.9.8

2017-01-23 – Multiple Eyed Creature

  • Architecture
    • Moved ‘Truthy/Falsy’ as ‘boolean’ characteristics
    • Updated Gremlin3 interface to handle Groovy maps
    • Added default name when creating project
  • Report
    • Added checks on merged table at Dump stage
    • Added support for PHP 7.1.1 and 7.0.15
  • Analysis
    • New analysis : variables assigned twice or more
    • New preference : new x() / new x;
    • Upgraded analysis : 1785 / 1794 test pass (99.5% pass)
    • Fixed Interface usage : missing interfaces extends interfaces
    • Added extra check for Functioncalls
  • Tokenizer
    • Added support for instanceof + several names

Version 0.9.7

2017-01-16 – Hundred Eyed Demon Lord

  • Architecture
    • Fixed constant names for tokens in Load
    • Changed duplication check to dedup(). Cleaned analysis for duplicates.
    • Speed but for large projects. Work in Progress.
    • Reduced usage of static properties
    • Better detection of PHP scripts during project
  • Report
    • Fixed generation of inventories when no target is provided
  • Analysis
    • New analysis : Could Be Protected Property (not a public)
    • New analysis : avoid large literal arrays in local variables.
    • New analysis : report long arguments.
    • Removed analysis : Structures/EchoArguments (double with Echo With Concat)
  • Tokenizer
    • Fixed list of constants for PHP 7.1

Version 0.9.6

2017-01-09 – Spider Demons

  • Architecture
    • Added support for report/analysis theme list in config (exakat and project)
    • Better cleaning of projects
    • Doctor : Initialisation with themes/reports; Reports executable being used.
    • Added a log for gremlin Queries
    • Rebuild the server command
    • Added ‘catalog’ command
  • Report
    • Split Phpconfiguration into eponymous and Phpcompilation
  • Analysis
    • New analysis : avoid Glob, use scandir without sorting.
    • New analysis : always configure ext/sqlite3 FetchRow()
    • New analysis : no string with append
    • Removed analysis : Structures/ForeachSourcesNotVariable
    • Upgraded Analysis ‘Should Import Functions’
    • Upgraded analysis : 1764 / 1773 test pass (99.5% pass).
  • Tokenizer
    • Added ‘aliased’ property to nodes.

Version 0.9.5

2017-01-04 – Immortal Ziyang

  • Architecture
    • Better check of PHP version
  • Report
    • Ambassador : report analysis settings
    • PHP Compilations : supports all extensions
    • New report : Inventories
  • Analysis
    • New analysis : Don’t Use Fallback to Global space
    • New analysis : MongoDB (ext/mongo version 3)
    • New analysis : zbarcode
    • Bug : Fixed intval for octals in Arrays/MultipleIdenticalKeys
    • Removed analysis : Php/InconsistantClosingTag (double)
  • Tokenizer
    • Ranking arguments, not functioncall

Version 0.9.4

2016-12-19 – Lady of Jinsheng Palace

  • Architecture
    • Rewrote the concurrence check (removed needs for ext/sem)
    • Results are never double anymore
    • Upgraded gremlin calls, to handle \n
    • Dump cleans the previous values before dumping
    • Excluded namespaces classes when searching for external libraries
  • Report
    • Ambassador : extension usage, inventories, global lists, stats, PHP Compilation directives
    • Covers more compilation directives (Not finished)
  • Analysis
    • New analysis : Final by Ocramius
    • Upgraded : Comparison with == : added curl_exec
    • Upgraded : isset with constant (mistake on properties as arrays)
    • Upgraded : Avoid using now uses full NS path
    • Upgraded : Useless instructions handles for() correctly
    • Upgraded : Recursive, IsGenerator and Loop Calling includes yield from
    • Upgraded analysis : 1741 / 1750 test pass (99.5% pass).

Version 0.9.3

2016-12-12 – Purple-Gold Bells

  • Architecture
    • Lots of cleaned code
    • Harmonized data for extensions
    • Stop ‘project’ if no code is available
    • Now using stub in phar.
  • Report
    • Added directives, bugfixes, external services and
    • Added support for PHP 7.0.14 and 5.6.29
  • Analysis
    • New analysis : WordPress, recommend prepare()
    • More favorite reports : final ?> and unset()/(unset)
    • Reduced number of double reports for many analysis
    • Update : Fixed analysis with $THIS
    • Upgrade : report useless casting of comparisons
    • Update : Should use this takes into account parent

Version 0.9.2

2016-12-05 – Golden Haired Hou

  • Architecture
    • First version of Exakat for docker (beta)
    • Added a waiting loop in cleandb
    • Docs include a list of new analysis per version
  • Report
    • Added 2 first inventories, Appinfo() in Ambassador
    • Favorites now reports global/$GLOBALS
    • Restore composer.lock report
    • Upgraded uselessReturn for the final return.
  • Analysis
    • New analysis for Newt, Nsapi,
    • New analysis : __ in methods names
    • New analysis : Too many local variables
    • New analysis : Avoid array_push()
    • Upgraded ext/apache coverage

Version 0.9.1

2016-11-28 – Sai Tai Sui

  • Architecture
    • Docker supported in exakat/config.ini for PHP binaries.
    • Added exakatSince in analysis documentation
    • Added some missing tokens in anonymize command
  • Report
    • Added several new analysis for PHP 7.1
  • Analysis
    • new analysis : find methods that could return Void
    • new analysis : find malformed octal sequence in strings
    • new analysis : spot rethrown exception
    • new analysis : reach the last element
    • new analysis : find undefined Zend Framework classes (2.0 to 3.0)
    • Upgraded analysis : 1706 / 1714 test pass (99.5% pass).
  • Tokenizer
    • Fixed handling references (some were missing)
    • Fixed handling of ellipsis (some were missing)

Version 0.9.0

2016-11-21 – Python Demon

  • Architecture
    • Project now include ‘Preference’ analysis
    • Dump is now incremental (-u option), and doesn’t need to be run in paralell
    • Added new hashAnalysis table, to handle generic results from analysis.
    • Added project name in the graph.
    • New command ‘status’ to report the current status of exakat
  • Report
    • Ambassador includes ‘Preferences’ section and new menu system
    • Upgraded progressbar to display project processing
  • Analysis
    • New analysis : Early Bail Out (with if/then)
    • New analysis : PHP 7.1 backward incompatibilities with microseconds
    • New analysis : WordPress : recommend using WP api, not PHP.
    • Upgraded ‘Constant condition’ to include do..while()
    • Upgraded ‘Useless Abstract’ to include methodless classes
    • Upgraded analysis : 1687 / 1697 test pass (99% pass).
  • Tokenizer
    • Added ‘Array’ to list of determinist functions (more constants are spotted)
    • Fixed ‘Name’ for Array Short Syntax.
    • Fixed variadic support

Version 0.8.9

2016-11-14 – Yellow Brows Great King

  • Architecture
    • Fixed and document -tgz and -zip option of init
    • Removed progress folder
    • Made MagicNumber a parallel task in Project.
    • Turned some die into assertion()
    • .phar doesn’t report any PHP errors.
    • Checked compilation with PHP 5.3->7.2
  • Report
    • Removed Faceted report
    • Added Bugfixes for PHP 7.0.13, 5.6.28 and PHP 7.2
    • Added ‘One variable string’ to Radwell report
  • Analysis
    • New analysis : Object Calisthenics #1, #4
    • New analysis : check that properties are all set at constructor time.
    • New analysis : spot useless checks
    • Updated UndefinedParentMP to take PHP ext classes into account
    • Upgraded ‘array_merge in loops’ with file_put_contents
    • Upgraded ‘useless parenthesis’ with math operations
    • Upgraded analysis : 1666 / 1682 test pass (99% pass).
    • Added debug Query method to analysis
  • Tokenizer
    • Fixed Files to compile first, then count tokens
    • Find Ext Lib handle UT classes better
    • Added limit to ‘code’ before loading into database. There is a 2M limit.
    • Fixed edge case with nested foreach()
    • Fixed segmentation fault when getting tokens from a script with wrong encoding

Version 0.8.8

2016-11-07 – Apricot Immortal

  • Architecture
    • Added concurency test to avoid running several instance at the same time
    • Report error when it happens with git clone
    • Added UT classes to external libraries
    • Dump is now hidden until finished.
    • Better detection of java and composer (Thanks Julien)
  • Report
    • New report : Radwell
    • New report : PhpConfiguration helping with configure and php.ini
    • Ambassador : Fixed dashboard values
  • Analysis
    • New analysis : time() vs strtotime(‘now’)
    • New analysis : useless casting
    • New analysis : No Isset() with Empty()
    • New analysis : don’t echo errors
    • New analysis : ext/rar
    • New analysis : use Class::class when possible
    • Added array_key_exists() to slow functions list.
    • Upgraded UpperCaseKeywords to handle partial uppercase
    • Added reported directives for ext/filter
    • Upgraded ‘Variables used once’ to exclude $this and arguments
    • Upgraded Unreachable Code with break/continue;
    • Multiple Identical Keys now handles null, boolean, real.
    • Upgraded analysis : 1652 / 1668 test pass (99% pass).
  • Tokenizer
    • Now spots \true, \false, \null as Boolean and Null
    • Removed ‘xargs too many arguments’ error on Linux

Version 0.8.7

2016-10-31 – Naked Demon

  • Architecture
    • Upgraded Boolean and Integer to report results without storing them in graph
  • Analysis
    • New analysis : modernizable empty() calls
    • New analysis : recommend Positive conditions
    • New analysis : drop else after return
    • Upgraded analysis : unreacheable code handles if/then with returns.
    • Added tests for Boolean and Null
    • More not Hashes dict.
    • Upgraded analysis : 1637 / 1650 test pass (99% pass).
  • Tokenizer
    • Fixed line number of
    • Fixed path for reporting

Version 0.8.3

2016-10-03 – Guzhi Gong

  • Architecture
    • Created temp folder .exakat in projects_dir
    • Removed mentions of float, only using Real
    • Moved Config to Exakat\Config
    • More examples in docs
  • Report
    • Added settings and files to Ambassador
  • Analysis
    • New analysis for dependant Traits
    • Added new Theme ‘Cakephp’ with 6 analysis for migration
    • New values for Not-a-hash
    • Unresolved Catch now takes Throwable into account
  • Tokenizer
    • Fixed edge case where return is used inside if/then without {} nor value.
    • Fixed ‘code’ and ‘token’ for ?: and ()

Version 0.8.2

2016-09-26 – Jinjie Shiba Gong

  • Architecture
    • More examples in docs
    • Fixed ‘file’ in results
  • Report
    • Added more media for Ambassador
  • Analysis
    • New analysis for count/strlen compared to 0
    • Upgraded analysis : 1563 / 1579 test pass (99% pass).
    • Backported all 4 WordPress analysis (wpdb, nonce usage)
    • Added new WordPress analysis : variable escaping in templates
  • Tokenizer
    • Fixed <?= so it is handled like echo

Version 0.8.1

2016-09-19 – Babo’erben

  • Architecture
    • Added main Try/Catch
  • Report
    • Added ‘Ambassador’ report.
  • Analysis
    • Upgraded analysis : 1540 / 1561 test pass (99% pass).
    • More documentation (examples, glossary)
    • Added a list of stopwords for No Hardcoded Hash
    • Upgraded analysis ‘No Hardcoded Path’ with protocols and glob with wildcards
    • Upgraded analysis ‘No Hardcoded Hash’ with stopwords
    • Added new Analysis for portability : spot common Linux files
    • Added new Analysis : use system temp dir, not hardcoded one
    • New analysis that spot unused protected methods
    • Added Time-to-fix and severity to all analysis
  • Tokenizer
    • Fixed edge case with if/then and try/catch
    • Synchronized constants in Tokens/Consts*.php
    • Added support for PHP 7.2

Version 0.8.0

2016-09-12 – Benbo’erba

  • Architecture
    • More examples in the docs
    • Better find root in export
  • Report
    • Prepared code for new report style
  • Analysis
    • New analysis : no throw in __destruct
    • New analysis : spot empty blocks in control structures
    • Update : Check parse_str and mb_parse_str()
    • Upgraded analysis : 1524 / 1540 test pass (99% pass).
  • Tokenizer
    • Fixed representation of [] and [index] with static properties

Version 0.7.10

2016-09-05 – Nine Headed Bug

  • Architecture
    • Added optional dependency to mbstring in Doctor
  • Analysis
    • Added analysis for PHP 7.1 features
    • Upgraded analysis : 1377 / 1510 test pass (91% pass).
  • Tokenizer
    • Removed parasit ‘void’ added in sequences.
    • Raised export max depth to 15.
    • Fixed FQN for new without parenthesis
    • Fixed support for PHP 5.5/5.6.
    • Added support for iterable
    • Checked support for extensions and ignore dirs

Version 0.7.9

2016-08-29 – Wansheng Princess

fallback FQN in functions, link constant to definitions.

  • Architecture
    • Added several features at Loading time : mark global variables in $GLOBALS,
  • Analysis
    • Added analysis for impossible comparisons (count($a) < or >= 0)
    • Added analysis for PHP 7.1 : removed directives, added functions
    • Upgraded analysis : 1485 / 1522 test pass (97.5% pass).
  • Tokenizer
    • Fixed edge case with <?= $v;
    • Fixed priorities between include and .
    • Better support of trait in classes

Version 0.7.8

2016-08-22 – Wansheng Dragon King

  • Architecture
    • Prepared databases for PHP 7.2
  • Analysis
    • Reports that preg_match results are not checked
    • Report List short syntax usage.
    • Upgraded analysis : 1224 / 1493 test pass.
  • Tokenizer

Version 0.7.7

2016-08-17 – Water Repelling Golden Crystal Beast

  • Analysis
    • Upgraded Bug database to handle PHP 7.0.10, 5.6.24 and 5.5.38

Version 0.7.5

2016-07-19 – Jade Faced Princess

  • Architecture
    • Added ‘anonymize’ command, that anonymize files and projects
  • Analysis
    • new analysis : recommend preg_replace_callback_array() when there are several call to preg_replace_callback_array()
    • Upgraded analysis : 1103 / 1464 test pass.
  • Tokenizer
    • Lots of fixes for stability : tested on 28M tokens

Version 0.7.4

2016-07-12 – Great Sage Who Pacifies Heaven

  • Architecture
    • Entirely rewrote the ‘Tokenizer’ part
    • Upgraded database schema
  • Analysis
    • Upgraded analysis : 1027 / 1461 test pass.
  • Tokenizer
    • Entirely rewrote the ‘Tokenizer’ part
    • 1851 UT pass correctly (extra 51)

Version 0.6.7

2016-05-30 – Red boy

  • Report
    • Added List With Keys in Appinfo()
    • Added by-reference functions mention
    • Now reporting good visibility/static for __callstatic
    • Added bug info for PHP 7.0.7, 5.5.36, 5.6.21
  • Analysis
    • New : recommend instanceof over is_object()
    • Fixed several ignored limitations, due to case : $phpversion
  • Tokenizer
    • Fixed ‘originclass’ in namespaced use

Version 0.6.6

2016-05-23 – Princess Iron Fan

  • Report
    • New report, suggest disable_functions directive value.
    • Added support for memcached directives
  • Analysis
    • New analysis : spot throw without new
    • New analysis : suggest adding 2nd parameter to unserialize in PHP 7.0+
    • New analysis : spot successive if/then with the same condition
    • Added support for zendoptimizer and suhosin extensions
    • PHP7 indirect expression : added support for {} in properties
  • Tokenizer
    • Raised cycle count, to speed up building AST for large projects

Version 0.6.5

2016-05-16 – Great Sage Who Pacifies Heaven

  • Analysis
    • New analysis : spot globals that may be turned into property
    • New analysis : check that ZF1 classes are well located
    • Upgraded ‘dangling foreach reference’ to support key=>value
    • Better support for PHP 7 indirect expression
    • More directives for xdebug
    • Eval Without Try is PHP 7 only
    • No Choice analysis is now case insensitive
  • Tokenizer
    • Added support for keys in list() (PHP 7.1)
    • Added support for constant visibility (PHP 7.2)
    • Added support for Multi catch : catch(A|B $e) (PHP 7.1)
    • Fixed bug with + and instanceof
    • Fixed precedence between :: and ??

Version 0.6.4

2016-05-09 – Bull Demon King

  • Architecture
    • Externalized the list of recognized libraries to Json
    • Added ‘WordPress’ and ‘Coding convention’ as Recipes
  • Report
    • Initial report for Zend Framework. Still prototyping.
  • Analysis
    • Accelerated analysis for Implicit GLobals variables
    • New analyze : Indirect Injections (Security)
    • New analyze : Should Use Coalesce (code upgrade)
    • New analyze : Suggest dirname(__FILE__) => __DIR__
    • Added ‘str_rot13’ as unsafe ‘crypto’
    • Properties without default can’t be redefined
    • Added Yield and Yield From as structures without parenthesis needs
    • Double Assignation, unless 2nd call is a functioncall (less false positives)

Version 0.6.3

2016-05-02 – Jade Faced Princess

  • Architecture
    • Removed several useless pieces of code (self analysis)
    • Added documentation for WordPress Recipes
    • Lengthened Cycle for tokenizer
  • Report
    • Added bugfixes for PHP 7.0.6, 5.6.21, 5.5.35.
    • Now reporting token counts per files
  • Analysis
    • New analysis : Spot variable that holds $_GET, $_POST, $_REQUEST or $_COOKIE values (internal)
    • New analysis : Report variables that are overwritten by themselves
    • New analysis : Report useless switch (empty, 1 case only)
    • Upgraded NoChoice to handle larger sequences
    • Upgraded Useless Global to handle global $x / $GLOBALS[‘x’] situations
    • New analysis : WordPress Recipe : Unverified Nonce, Best Usage for $wpdb
    • New analysis : Void for PHP 7.1
  • Tokenizer
    • Fixed but with Typehint
    • Added phppowerpoint class in external libraries

Version 0.6.2

2016-04-25 – Long Armed Ape Monkey

  • Architecture
    • Fixed phar detection (based on ext/phar)
    • Cleaned code with myself
  • Report
    • New report format : clustergrammer
  • Analysis
    • New analysis : same conditions in If / Then
    • New analysis : spot dead code in catch expressions
    • Static loops now exclude methods usage
    • Indirect variable expression are stricter
    • preg_* Option e has better support for delimiters
    • Upgraded Direct Injection in case of concatenation
    • Detect Ellipsis when counting arguments
    • Could use short assignation : avoid $a += $a + 3;
  • Tokenizer
    • Sped up Typehint detection
    • No indexing for T_STRING in properties
    • Reduced errors from token_get_all()

Version 0.6.1

2016-04-18 – Red Bottomed Horse Monkey

  • Architecture
    • Prepared to support PHP 7.1
    • Fixed bug in user / passwords when initing the project
    • Better support for ::class when searching for libraries
  • Analysis
    • UselessParenthesis : spot nested parenthesis
    • Spot exceptions that are thrown but uncaught by the current code
    • Support for ext/lua,
    • New : Check catch order in try/catch
    • Better identification of Composer classes, based on composer.json
    • Now spot interfaces in use declarations (less undefined interfaces)
  • Tokenizer
    • Added support for PHP 7.1
    • key => value in list() calls
    • visibility for constants in Classes and Interfaces
    • Accelerated up Typehint support

Version 0.6.0

2016-04-11 – Intelligent Stone Monkey

  • Architecture
    • Fixed a bug in Find external libraries
    • Applied fixed based on new analysis audit
    • Fixed a bug that prevented results to be prepared for report (Thanks Philippe G.)
  • Report
    • Now reports reason for excluding a file from analysis
  • Analysis
    • New analysis : Logical Mistake (first version),
    • New analysis : Iffectations (code restoration)
    • New analysis : Common alternatives
    • New analysis : No Choice (No alternatives)
    • New analysis : Random_* Without Try (security risk)
    • New analysis : Unknown PCRE options
    • New analysis : Identical conditions
    • New analysis : Hardcoded hashes
    • Upgrade List with appends with variable name
    • Upgrade /e option detection
    • Fixed detection of unused use, with long namespaces.
    • Added finfo to ext/finfo
    • Finds exceptions that are reserved for later throwing
    • Exclude anonymous classes from Already Defined Interface
  • Tokenizer
    • Extended cycle number to speed up tokenizer.
    • Better escaping of file names

Version 0.5.9

2016-04-04 – Six Eared Macaque

  • Architecture
    • One progressbar per Recipe during project analysis
    • report’s documentation
    • Upgraded ‘External Lib’ to ignore Composer folders.
    • Fixed a bug about interpreting tokens
    • Dump collects classes, interfaces, traits definitions
    • Now storing project name in database for future use
    • Removed PHP configuration modifications (error_reporting, display_errors)
  • Report
    • Added ‘Uml’ report : hierarchy report
    • Now reports Pear Usage
    • Upgraded Bugfix database for 7.0.5, 5.6.20 and 5.5.34
    • Report Yield (from) usage
    • New external configuration files : bazar, github, docker, openshift
  • Analysis
    • Added detection for undefined classes in ZF (1.8 to 1.12)
    • New : report undefined Traits
    • Added support for parent/grandparent when checking argument numbers
    • Added support for V8js
  • Tokenizer
    • Fixed bug in fullnspath for use within trait or class
    • It is possible to reach a property on an array append
    • Fixed AST between PHP 5 and 7 for globals
    • Simplified ++ analysis

Version 0.5.8

2016-03-28 – Sun Deity of Mao

  • Architecture
    • Moved to self::, instead of static::.
    • First UT for command line
    • Sped up phploc. Prepare code for finite states, in Tasks.
    • Prepare for Gremlin3 (moved gremlin calls to class)
    • Reduced shell_exec usage
  • Report
    • Fixed display bugs in Devoops report
    • Removed double analysis
    • ‘Wrong number of arguments’ now supports constructors
  • Analysis
    • Upgraded ‘No Hardcoded IP’ to handle constants, spot domains
    • Added support for TokyoTyrant
    • New analysis : spot simple regex, and suggest strpos
    • Excluded “$a[b]” from undefined constants
  • Tokenizer
    • Fixed bug with nested call to echo.
    • Fixed bug where concatenation ends on a ‘AS’ keyword
    • Added support of Constants in Foreach
    • Fixed multiple bugs in Grouped Use
    • Support for function as ‘class’ in static calls
    • Comparison accepts powers
    • Added support for empty array short syntax in sequence
    • Support constant with visibility
    • Parenthesis may be the base for Arrays

Version 0.5.7

2016-03-21 – Scorpion Demon

  • Architecture
    • Added support for folders in UT, for tests that requires several files
    • Improved compatibility with PHPunit
    • Moving gremlin_query() to Gremlin2 class
    • Doctor also reports for phar
    • Improved adaptation to PHP and Exakt in server mode
    • Autoload shouldn’t die
    • Fixed case when calling Phpexec
    • Upgraded status presentation in server mode
  • Report
    • More details for Global Variable list
  • Analysis
    • Now spotting class when it is inside a string
    • Check for $this outside a trait/class
    • Check for ternary/concatenation precedence
    • Spot classes that attempt to extend final
    • Spot set_exception_handler() that may need rework
    • Refined array_merge analysis, in case of nested loops
  • Tokenizer
    • Yield [from] may be inside an array
    • Refactored for/foreach tokens
    • Added support for a ‘Project’ node

Version 0.5.6

2016-03-14 – Ruler of Women’s Country

  • Architecture
    • Fixed some backward compatibility with PHP 5.4
    • Started revamping ‘Status’ command
    • Centralized all tokenizations to PhpExec class
    • Removed usage of __DIR__ and __FILE__
  • Analysis
    • Spot usage of empty() that can’t work on PHP 5.4
    • Suggest using random_int instead of rand
    • Upgraded ‘No Array_merge in loops’ with array_merge_recursive
    • Added support for scalar type hint in Undefined Classes
    • New analysis : Better rand()
  • Tokenizer
    • Instanceof has lower precedence than comparison

Version 0.5.5

2016-03-07 – Immortal Ruyi

  • Architecture
    • Added default values for all neo4j_* configs
  • Report
    • Added support for bugfixes in 7.0.4, 5.6.19 and 5.5.33
    • Added support for bugfixes in 7.1.0-dev
  • Analysis
    • Added support for Typehint in Undeclared Classes
    • Extended ‘Multiple Classes in One File’ to interfaces and traits
    • Added analysis for truthy and falsy
    • Spot interfaces implemented by parents (Thanks PHP Inspect)
    • Report usage for unsafe Curl options
  • Tokenizer
    • Fixed emptyString inside a Heredoc
    • Fixed bug where Sign has lower priority than Power

Version 0.5.4

2016-02-29 – Nezha

  • Architecture
    • Removed some shell_exec() to help with portability
    • Clean command now rebuilds an empty datastore
    • Check the availability of php binaries before using
    • Produce report in a hidden folder, then push it
  • Report
    • Report the list of bug fixes that apply to code
  • Analysis
    • Help using preg_match_all options
  • Tokenizer
    • Fixed a bug with reference and instanceof

Version 0.5.3

2016-02-22 – Li Jing

  • Architecture
    • More UT
    • Supports symlinks for neo4j’s folder
    • Supports symlinks for ‘code’ folder in projects
    • Added upgrade command to check for exakat’s available versions and upgrade
  • Analysis
    • Spot CLI scripts
    • Undefined Interfaces avoids self, parent, static
    • Fixed bug in spotting undefined Interface
    • Variable Used Once in a method are not arguments
    • Added support for all structures in Double Assignation

Version 0.5.2

2016-02-15 – Single Horned Rhinoceros King

  • Analysis
    • Fixed functioncall detection with ’empty’
    • Refined ‘Buried assignation’ analysis
    • Fixed a bug when using definitions (class, trait, interface, functions…)
    • Better support for case-insensitive constants
  • Tokenizer
    • Fixed bug in use statement
    • Now spots PHP code in files without extension
    • Upgraded support for grouped Use statement
    • namespace may be a valid nsname part
    • Fixed bracket reports in do…while

Version 0.5.1

2016-02-08 – King of Spiritual Touch

  • Architecture
    • Added test in UT to skip incompilable sources
    • Stabilized tokenizer’s UT (partial)
  • Report
    • HTML protection in Devoops format
    • No display of negative stats
    • Added support for directives : wincache, xcache, apc, opcache
    • Added support for eaccelerator and openssl
  • Analysis
    • New analysis : Spot unknown PHP directive names
    • Fixed Constants/MultipleDefinedConstants
    • Better detection of functioncalls (with List)
    • Better spotting of ini_set arguments
    • Unreachable code now finds die and exit
    • ObjectReference won’t report references on scalar types
    • Revamped ‘pregOptionE’ analysis
    • Cleaned code with too many arguments
    • Removed useless print
    • Better report of eval() usage
    • Revamped ‘Dynamic code’ report
    • Fixed bug in Case/Default that are empty
    • Avoided sequences of sequences in Case/Default
    • Fixed Detection of classes’ usage with extension
  • Tokenizer
    • Fixed bracket detection on While and DoWhile
    • Detect void in DoWhile
    • Removed useless T_DIE token
    • Fixed fullcode processing for anonymous classes

Version 0.5.0

2016-02-01 – Immortal of Antelope Power

  • Architecture
    • Added support for HTTP API, through ‘server’ command.
  • Analysis
    • Fopen modes checked
    • Redefined default, in class’s properties
  • Tokenizer
    • Fixed situation where echo and print used parenthesis (they don’t)
    • Fixed rare but with instanceof and concatenation
    • Fixed support of integers in Gremlin
    • Fixed bug in addslashes and and $ protection order
    • Made Assignations more robust (no un-processed tokens)
    • Reduced the number of shell_exec usage => speed up
    • Finished support for relaxed keyword support in classes (PHP 7)

Version 0.4.6

2016-01-25 – Immortal of Elk Power

  • Architecture
    • New installation script with Vagrant and Ansible (Thanks Alexis!)
    • Updated documentation
    • Added a command to remove a project
  • Report
    • Devoops reports has case-insensitive menu sort
  • Analysis
    • Spot redefined properties, classes and methods.
    • Spot properties that may be turned private
    • Fixed special case in Wrong Number Of Arguments
    • Fixed ‘OnePage’ analysis
  • Tokenizer
    • Finished support for relaxed keywords in classes
    • Sped up tokenizer by keeping counts of tokens in datastore
    • Fixed detection of CakePHP
    • Fixed special case with Labels
    • Fixed rare case with die() within ternary operator

Version 0.4.5

2016-01-18 – Immortal of Tiger Power

  • Architecture
    • Upgraded documentation
    • Default command is ‘help’
  • Report
    • Better version for FacetedJson report
  • Analysis
    • New analysis that spots wrong type of argument in PHP internal functions
    • Fixed Isset With Constant for PHP 7
    • Fixed a bug that limited query size during analysis (good for bigger projects)
    • Include variadic (…) to Variable Argument Number
  • Tokenizer
    • Fixed a bug that blocked tokenizer when a analyzed script generated parse errors.
    • Added support for bazar, svn.
    • Fixed a bug in Nsnames at Loading time.

Version 0.4.4

2016-01-11 – Crown Prince Mo’ang

  • Architecture
    • Reviewed OnePage analysis
    • Dump as now an option to select Recipes
    • Dump forces line to be integer
    • Added a task to update a project’s code (git only ATM)
  • Report
    • Better check when opening database for report (more to come)
    • FacetedJson (and Json) report ignore non-unicode lines
    • Added ‘search’ box to facetedJson
  • Analysis
    • Switch To Switch suggestions
    • Unused arguments patch for arguments used in methods
    • Unused properties doesn’t mistake function static variable
  • Tokenizer
    • All Nsnames are now build at Loading time
    • Constants may be calld ‘const’
    • More relaxed syntax for methods (exit, include, eval…)
    • Foreach may use coalesce
    • Fixed an edge case with Closures in functioncall

Version 0.4.3

2015-01-04 – Tuolong

  • Architecture
    • Copyright year bump
    • Doctor reports memory_limit and php version consistency
    • Switched to rmDirRecursive
  • Report
    • Removed old style reporting system
  • Analysis
    • Fixed fileupload and filesystem directives reports
    • Added report of Environment variable usage
    • Added iconv_set_encoding to the list of directive usage
    • Extension analyzes now takes into account namespaces and traits
    • Analysiss all have severity and time to fix
  • Tokenizer

Version 0.4.2

2015-12-22 – Red Boy

  • Architecture
    • Published documentation on http://exakat.readthedocs.org
    • First version of the faceted report (-format Faceted)
  • Report
    • First version of the faceted report (-format Faceted)
    • Fixed Dump that actually finishes after some time
  • Analysis
    • Spot unused arguments
    • Fixed notInInterface() filter
    • Upgraded HtmlEntitiesCall

Version 0.4.1

2015-12-14 – Azure Lion

  • Architecture
    • Rebuild the report system, for speed and versatility.
  • Report
    • Available format : JSON, Sqlite, XML, Text and HTML (Devoops).
    • Rules are now part of the documentation.
  • Analysis
    • Upgraded ‘Buried assignations’
    • Locally Unused also spots properties without visibility (but with definition)
    • Could be class constant, if the property is used at least once
    • Better detection of files that are Definitions only (fix at Namespace calls)
    • ++ is now correctly reported as isRead and isWritten in Arguments
    • Closure’s use($x) are now reported in both context (calling and called)
    • Removed usage of ‘back’ method, that is blocking at high token counts
  • Tokenizer
    • Fixed support for {} and {$ } inside strings
    • Fixed bug with Typehint, that prevented compilation
    • Fixed several (rare) edge cases with Sign and Staticproperties.
    • Fixed detection of closing tags

Version 0.4.0

2015-12-07 – Lion Lynx Demon

  • Architecture
    • Made PHP 7.0 the default (moved to 0.4.0)
    • Ran unit tests on PHPunit 5.1
    • Added a background tasks to build report. Will allow for progressive report.
  • Report
    • Rewrote the report from scratch. Should be finished next iteration.
    • New report is working for XML and Text report.
  • Analysis
    • Added support for ext/pecl_http
    • Added several classic folders as ignored by default (change this in config.ini)
    • Create a check for functioncall (and not methods)
    • Spots join(”, file())
    • Safely ignoring some dynamic calls in undefined functions (Thanks Marc Delisle)
    • Removed ArrayAppend from double assignation
  • Tokenizer
    • Fixed a bug when class was auto-referenced.
    • Fixed detecting Static properties when they are also arrays.
    • Fixed fatal errors for mal-formed octals

Version 0.3.12

2015-11-30 – Nine Tailed Vixen

  • Architecture
    • ProgressBar is now displayed during Analyze phase.
  • Report
    • Report list of error messages used in the library
  • Analysis
    • Omit eval with hardcoded strings
    • Exclude some index from _SERVER from the report (they are safe)
    • Exclude php://* files as hard coded path
    • Report usage of timestamp to calculate duration
    • Spots unused traits
    • Fixed support for big integers
  • Tokenizer
    • First support for relaxed keywords in classes. More to come.
    • Checked UT on PHP 7 (Soon to become default version)
    • Fixed version detection in Tokenizer
    • Fixed fullnspath in Use expression;

Version 0.3.11

2015-11-16 – Hu A’qi

  • Architecture
    • Report external services files that may be in the repository
  • Report
    • Report nested dirname calls (may be changed in PHP 7)
  • Analysis
    • Better spotting of static loops
    • Don’t confuse $globals and $GLOBALS
  • Tokenizer
    • Rewrote support for As in classes.
    • Fixed arguments that were indexed as Void
    • Trimmed code

Version 0.3.10

2015-11-09 – Silver Horned King

  • Architecture
    • Centralized call to cypher.
  • Report
    • Sped up several analyzes
  • Analysis
    • Fixed naming bug with reflexion
    • Support class name in arrays, short syntax
    • Report Relay Functions
    • More PHP 7 incompatibilities reports
  • Tokenizer
    • Support for 7.1 compilation (dev only)
    • Added cakephp to external libraries
    • Fixed parsing bug with static (as property definition)
    • Fixed ‘count’ in sequences from Function
    • Rewrote Argument detection (when there is no parenthesis)

Version 0.3.9

2015-11-02 up – Golden Horned King

  • Architecture
    • Cleaned code with Exakat
  • Analysis
    • Refined report about double assignation
    • Fixed argument counting in Function Definition
    • Better support of array in Locally Used Properties
    • Updated Composer database
  • Tokenizer
    • Fixed a bug that ignored Blocks
    • Fixed a rare bug with echo and the following arguments

Version 0.3.8

2015-10-26 – Baihuaxiu

  • Architecture
    • Cleaned too many display (they go to log now), leaving commandline empty (or -v)
    • A lot more PHP 7 incompatibilities spotted
  • Report
    • Added the list of global variables in the projects (if any)
    • Fixed reports for PHP 5.2 (they were ignored)
  • Analysis
    • Better handling of composer in unresolved classes
    • Spot setlocale with string (PHP 7)
    • Spot string unpacking (PHP 7)
    • Upgraded static method call, to avoid classes of the same family
    • Report eval without try/catch
    • Report preg_replace with /e
    • Fixed report for empty list()
    • Spot hexadecimal in strings
    • Report usort (and co) as incompatibilities between PHP 7 and 5
  • Tokenizer
    • Fixed edge case with Sign and namespaced function
    • Added xajax, adodb and gacl as common library
    • Fixed arguments in short array syntax
    • Fixed case where [3] was spotted inside a string

Version 0.3.7

2015-10-19 – Yellow Robe Demon

  • Architecture
    • Added and reviewed many UT. More stability.
  • Report
    • Fixed the report of the actual version of PHP being used.
    • Non-run analysis are not marked with a stethoscope
    • Report now report closures and not the containing method
    • Removed some dashboard that would generate empty links
  • Analysis
    • Better spot of blocks inside Alternative syntax
    • Speed up method spotting
    • Fixed properties which were mistaken with deep definitions
  • Tokenizer
    • Fixed fullcode for Typehint
    • Removed Ppp and moved it to Visibility

Version 0.3.6

2015-10-12 – White Bone Demon

  • Architecture
    • Large speed up at Parsing stage, for large projects
    • Added git informations in Doctor
  • Tokenizer
    • Changed processing for Arguments.
    • Support for more PHP 7 features, including Use Grouping,
    • Fixed support for ~
    • Simplified ::class handling

Version 0.3.5

2015-10-06 – Mingyue

  • Architecture
    • Reported usage of array constants, improving backward compatibility
    • Checked running on PHP 7
  • Report
    • Added Definition annex
    • Fixed ‘version incompatible’ report that was mistaken with ‘no result’
    • List all directives being modified in the code
    • List more directives that should be set for production.
  • Analysis
    • Reworked the Themes about compatibility.
    • Added many tests for PHP 7.0 compatibility
    • Sped up UsedMethod analysis
    • Added support for PHP 7 feature : Unicode Escape Sequences, New functions/classes/interfaces, Removed Functions,
  • Tokenizer
    • Changed processing for Empty PHP code
    • Support Variable Indirection for both PHP 5 and 7 (depends on exec version)
    • Avoid ignoring all code when finding External Libraries
    • Fixed edge cases with declare() when it is conditional.
    • Support for PHP 7’s f()()()

Version 0.3.4

2015-09-28 up – Qingfeng

  • Architecture
    • Added token_limit configuration to avoid running too large project (default is 1 000 000)
    • Several new tools for internal consistency check.
    • Removed support for neo-contrib’s gremlin plugin
  • Report
    • Report libraries that were found and ignored
  • Analysis
    • Sped up queries that required previous analysis or multiples atoms
    • Spot global keywords inside loops (perf)
    • Better spotting of Composer classes
    • Report double assignations
  • Tokenizer
    • Added support for Anonymous classes (PHP 7)
    • Fixed namespace manipulations (They weren’t lower case)
    • Mark constants as fail back globals or local to the namespace
    • Support Null Coalesce operator (PHP 7)
    • Fixed rare case for empty strings and noDelimiter

Version 0.3.3

2015-09-21 – Immortal Zhenyuan

  • Architecture
    • Removed some shell stderr that leaked to the main script
  • Report
    • Added the list of used analysis
    • favicon is now used in the report (Devoops)
    • Fixed count report for Else
    • Fixed directive reports for trader, bcmath and ldap.
  • Analysis
    • Rebuild the composer database
    • Fixed htmlentities analyze
    • Spot usage of ‘substr($s, $p, +/- 1)’ and recommend ‘$s[$p]’
  • Tokenizer
    • Fixed Multiplication with instantiation

Version 0.3.2

2015-09-14 – Tiger Vanguard

  • Report
    • Added link back from analysis to its themes.
  • Analysis
    • Useless Returns are now Trait compatible
    • Optimized Composer validation
    • Removed IsKnownVendor analyze (replaced by Composer)
    • Spot inconsistent concatenations (“$a b”.$c)
  • Tokenizer
    • Fixed situation where forgotten white spaces didn’t have a file
    • Removed DELETE and S_STRING index
    • Fixed compatibility with Debian (shell commands)
    • Added UT for and / && precedence versus =
    • Fixed identification of empty instructions (Functions / Closure have different behaviors)

Version 0.3.1

2015-09-03 – Yellow Wind Demon

  • Architecture
    • Removed usage of Everyman dependencies
    • Added support for Neo4j Authentication
    • Added a JobQueue
    • Cleaned code with exakat itself
  • Report
    • Added Dump to SQLITE format for custom manipulations of the results
    • Added new collection of rules for Calesthenics (dev)
    • Updated composer database
    • Now reporting found Composer.
  • Analysis
    • Fixed Compilation spotting
  • Tokenizer
    • Fixed an edge case with Sign, when used in a concatenation

Version 0.3.0

2015-Aug-25 – Lingxuzi

  • Architecture
    • Moved to Thinkaurelius’s gremlin plug-in, Neo4j 2.2.4 and Java 8.
  • Report
    • Added a view by File
    • Added sorting for results (by file and by analyze)
  • Analysis
    • Spot functions whose results should be checked before they are used
    • Spot breaks/continue out of a loop
    • Exports all the results in a dump.sqlite file
  • Tokenizer
    • Fixed a minor bug with ::class (messed up the {} counts)
    • removed dependency to Everyman’s Neo4j classes.
    • Added a step that removes big and identifiable libraries in PHP (such as tcpdf, jpgraph, etc..)

Version 0.2.5

2015-Aug-17 – Scholar in a White Robe

  • Report
    • List the files that are ignored in the annex
  • Analysis
    • Updated Knowledge Database for memcache, aliases, zlib, standard
    • Added more directives to Review
    • Added support for xhprof
  • Tokenizer
    • Fixed bug with Else (Not-alternative)
    • Fixed Sequence creation with If-Then
    • Yield may be assigned
    • Removed one Tokenizer’s operation (filterOut2)
    • Fixed priorities with Concatenation, Multiplication, Additions
    • Process Echo and Print separately
    • Automatically removes common bundled libraries to reduce app size

Version 0.2.4

2015-06-22 – Black Wind Demon

  • Analysis
    • Rebuild the composer database
    • Lots of new extensions supported : ev, libevent, event, php-ast, wikidiff2, proctitle, inotify, ibase, amqp, geoip, output buffering,
    • Report errors when non-variables are returned by reference
    • Marked more analyzes for PHP 7
    • Fixed Unpreprocess structures with split
    • Upgraded spotting for useless parenthesis
    • Added a check ++$i vs $i++;
    • Exclude abstract methods from Variables Used Once
    • Added new directives
    • Also check for ASP Tags
  • Tokenizer
    • Fixed the fullpath for functions when they are not defined in the code
    • Upgraded support for Return Type (PHP 7.0+)
    • error_reporting with -1 is OK
    • Fixed a precedence problem with & and &&
    • Refactored Ifthen token to support return type
    • Added a kill command when cleaning Database

Version 0.2.3

2015-06-22 – Techu Shi

  • Analysis
    • Report usage of Return Typehint, and Scalar Typehint
    • Report usage of classes that used to return null on new
    • Report useless abstract classes
  • Tokenizer
    • Upgraded ‘init’ command, to handle various VCS
    • Added support for Return Typehint

Version 0.2.2

2015-06-16 – Xiong Shangjun

  • Analysis
    • Now spots short assignations
    • More UselessInstructions spotted
    • Ignore Unset as modified values in loops
  • Tokenizer
    • Added support for PHP7 new tokens (T_SPACESHIP, T_COALESCE, T_YIELD_FROM)
    • Split loading into more .csv files for lighter and more robust queries
    • Better support for arrays [1,2,3] as functioncall (just like array())
    • Process tokens by batches of 800
    • Clean vertex at each queries, not Sequence

Version 0.2.1

2015-06-02 – General Yin

  • Analysis
    • sizeOf may have 2 arguments
    • 2 clearPHP link added in documentation
  • Tokenizer
    • Fixed bug with Bitshift and Addition
    • Fixed bug with Sequence when merging sequences
    • Fixed bug with String and Addition
    • Fixed Visibility in Use instruction
    • Foreach accepts Constants as Source
    • Fixed special case for nested IfThen

Version 0.2.0

2015-05-15 – Demon of Confusion

  • First version