{"id":13418,"date":"2021-10-07T12:27:15","date_gmt":"2021-10-07T12:27:15","guid":{"rendered":"https:\/\/www.exakat.io\/?page_id=13418"},"modified":"2021-10-07T12:57:43","modified_gmt":"2021-10-07T12:57:43","slug":"changelog-2-0","status":"publish","type":"page","link":"https:\/\/www.exakat.io\/ex\/changelog-2-0\/","title":{"rendered":"Changelog (up to 2.0)"},"content":{"rendered":"\t<div class=\"box has-hover   has-hover box-text-bottom\" >\n\n\t\t<div class=\"box-image\" style=\"width:19%;\">\n\t\t\t\t\t\t<div class=\"image-cover\" style=\"padding-top:100%;\">\n\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.exakat.io\/wp-content\/uploads\/2015\/06\/DSCN1087-copie-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" srcset=\"https:\/\/www.exakat.io\/wp-content\/uploads\/2015\/06\/DSCN1087-copie-150x150.jpg 150w, https:\/\/www.exakat.io\/wp-content\/uploads\/2015\/06\/DSCN1087-copie-100x100.jpg 100w, https:\/\/www.exakat.io\/wp-content\/uploads\/2015\/06\/DSCN1087-copie-300x300.jpg 300w, https:\/\/www.exakat.io\/wp-content\/uploads\/2015\/06\/DSCN1087-copie.jpg 320w, https:\/\/www.exakat.io\/wp-content\/uploads\/2015\/06\/DSCN1087-copie-100x100@2x.jpg 200w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/>\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t<div class=\"box-text text-center\" >\n\t\t\t<div class=\"box-text-inner\">\n\t\t\t\t\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n\t\n\t<section class=\"section\" id=\"section_242943791\">\n\t\t<div class=\"bg section-bg fill bg-fill  bg-loaded\" >\n\n\t\t\t\n\t\t\t\n\t\t\t\n\n\t\t<\/div>\n\n\t\t<div class=\"section-content relative\">\n\t\t\t\t\t<\/div>\n\n\t\t\n<style>\n#section_242943791 {\n  padding-top: 30px;\n  padding-bottom: 30px;\n}\n<\/style>\n\t<\/section>\n\t\n<p>Note : the <a href=\"https:\/\/www.exakat.io\/en\/exakat-changelog\/\">more recent changelog<\/a> is here.<\/p>\n<h2>Version 2.0.0<\/h2>\n<p class=\"date\">2019-10-21 &#8211; Civil Star of Mystery and Darkness<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Manual file\/line fixes<\/li>\n<li>More simplifcations in load step<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : fixed performance display<\/li>\n<li>Ambassador : report list of shell commands<\/li>\n<li>Typehint4all : first report<\/li>\n<li>Perfile : fixed sorting<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report possible typehint for bool, int, string, array. WIP<\/li>\n<li>Upgraded analysis : common alternatives are extended to switch and elsif<\/li>\n<li>Upgraded analysis : xmlreader description includes class constants, properties and methods.<\/li>\n<li>Upgraded analysis : callback needs return, is extended to php native functions<\/li>\n<li>Checked unit tests : 3345 \/ 3377 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.9.9<\/h2>\n<p class=\"date\">2019-10-14 &#8211; Lasting Prosperity Star of True Man<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Documentation review<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New reports : Stubs, Rector<\/li>\n<li>Typehint stats<\/li>\n<li>Stubs takes into account use expression<\/li>\n<li>Added Concrete5 and Typo3 as vendors<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : checks on is_a third argument<\/li>\n<li>New analysis : Invalid mbstring encodings<\/li>\n<li>New analysis : Weird Index in arrays<\/li>\n<li>New analysis : Avoid FILTER_SANITIZE_MAGIC_QUOTES<\/li>\n<li>New analysis : Don&#8217;t forget third argument<\/li>\n<li>New analysis : Hard to update methods<\/li>\n<li>New analysis : Merge two ifthen into one<\/li>\n<li>New analysis : Report wrong type with calls<\/li>\n<li>New analysis : Check case for namespaces<\/li>\n<li>Updated analysis : Undefined interfaces now includes interfaces extensions<\/li>\n<li>Updated analysis : Report more wrong types with return type<\/li>\n<li>Updated analysis : Register globals also applied to class<\/li>\n<li>Updated analysis : Could Use Try covers more new, functions and static calls<\/li>\n<li>Updated analysis : Useless Cast also reports (string) array (always Array)<\/li>\n<li>Checked unit tests : 3343 \/ 3366 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Create default values for foreach<\/li>\n<li>Load captures empty files, and omit them<\/li>\n<li>Create default values also handles ??=<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.9.8<\/h2>\n<p class=\"date\">2019-10-07 &#8211; Giant Gate Star of Dark Essence<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Upgraded dump command to handle multiple -P<\/li>\n<li>.yaml configuration handles multiple reports<\/li>\n<li>Started journey to strict_types<\/li>\n<li>Code cleaning<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : Fixed report of Flexible Docs<\/li>\n<li>Ambassador : trimmed delimiters in inventories<\/li>\n<li>Inventory : Foreach, with key values<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Wrong case for functions<\/li>\n<li>New analysis : Parameter Hiding<\/li>\n<li>New analysis : Report usage of Traversable<\/li>\n<li>Updated analysis : Undeclared properties skips undefined properties<\/li>\n<li>Updated analysis : Useless Interface, modernized query<\/li>\n<li>Updated analysis : String Holding Variables now skips default, const, sprintf<\/li>\n<li>Updated analysis : Binaries are not confused with hex<\/li>\n<li>Updated analysis : Extended &#8216;Insufficient typehint&#8217; to abstract classes<\/li>\n<li>Checked unit tests : 3324 \/ 3343 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed handling of large powers<\/li>\n<li>Added more escaping when storing to SQLITE<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.9.7<\/h2>\n<p class=\"date\">2019-09-30 &#8211; Greedy Wolf Star of Sunlight<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for analysis reporting missing values in a reference list<\/li>\n<li>Fixe batch dumping of results<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : new inventory : dereferencing levels<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Use PHP Native URL parsing functions<\/li>\n<li>New analysis : Maximum dereferencing level<\/li>\n<li>New analysis : Use case value in a switch : it was already tested<\/li>\n<li>Updated analysis : No class as typehint accepts abstract classes<\/li>\n<li>Updated analysis : Create Magic Property reachs out to traits<\/li>\n<li>Updated analysis : Security also reports usage of unserialize()<\/li>\n<li>Updated analysis : Mistmatched default argument also covers methods<\/li>\n<li>Updated analysis : Never used parameter also covers methods<\/li>\n<li>Updated analysis : Unused global also cover static variables<\/li>\n<li>Updated analysis : Duplicate strings threshold is not 15, not 5.<\/li>\n<li>Checked unit tests : 3289 \/ 3319 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>RETURNTYPE, TYPEHINT, and DEFAUT are not always on, with Void atom, or better.<\/li>\n<li>DEFAULT value targets end-values, skips ??, ?:, () and =.<\/li>\n<li>Exceptions now reports errors in the Query, not where it is thrown<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.9.6<\/h2>\n<p class=\"date\">2019-09-23 &#8211; Star of Birth<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Moved new elements to Complete\/<\/li>\n<li>Moved new elements to Dump\/<\/li>\n<li>Initial configuration of project now includes analysis parameters with default<\/li>\n<li>Added descriptions to Rulesets<\/li>\n<li>New command Config : displays current configuration for reuse and editing<\/li>\n<li>Upgraded Doctor : support for docker-php, in-code<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : removed {} on magic property inventory<\/li>\n<li>Ambassador : new inventory of network protocols used (udp:\/\/, ssh2:\/\/&#8230;)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : avoid mb_string inside loops<\/li>\n<li>New analysis : avoid SSLvx and TLSv1.0<\/li>\n<li>New analysis : report duplicate literal in the code, with parameter<\/li>\n<li>New analysis : warn about null property<\/li>\n<li>New coverage : calls to __call and __callStatic<\/li>\n<li>Updated coverage : expressions with parenthesis<\/li>\n<li>Updated coverage : default values are now targeting the final value in multiple assignations.<\/li>\n<li>Updated analysis : Strange Variable name skips Staticdefinition and its default value<\/li>\n<li>Updated analysis : Useless instructions are upgrade with pure functions<\/li>\n<li>Updated analysis : Extended Closure2string with Arrowfunctions<\/li>\n<li>Updated analysis : Extended &#8216;Could be local variable&#8217; to traits<\/li>\n<li>Updated analysis : Unused Global also covers static variables<\/li>\n<li>Checked unit tests : 3279 \/ 3304 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Updated tokens for PHP 7.4<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.9.5<\/h2>\n<p class=\"date\">2019-09-16 &#8211; Star of Adversity<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added count property to Analysis node, stepstone for Diff analysis<\/li>\n<li>Added support for &#8216;optional&#8217; step<\/li>\n<li>Added support for &#8216;interfaces&#8217; as typehint for remote definitions<\/li>\n<li>Removed more true\/false values<\/li>\n<li>Fixed strtolower with mb_strtolower in Dump<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added several PHP error messages<\/li>\n<li>Ambassador : added inventory of magic properties<\/li>\n<li>Ambassador : added inventory of typehints for methods (WIP)<\/li>\n<li>Added support for function\/closure\/argument arguments<\/li>\n<li>Added support for function\/closure\/argument arguments<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : No literal value as referenced argument<\/li>\n<li>New analysis : use array_slice or array_splice<\/li>\n<li>New analysis : Useless typechecks with Typehint<\/li>\n<li>New analysis : Report non-implemented interfaces<\/li>\n<li>New analysis : Incompatible Signatures with Self (PHP 7.4+)<\/li>\n<li>New analysis : Report wrong expectations from interfaces<\/li>\n<li>Upgraded analysis : Excluded __construct and __destruct from Magic Methods<\/li>\n<li>Upgraded analysis : Concat and Addition : Now also for bitshift<\/li>\n<li>Upgraded analysis : Incompatible Signatures with Self (PHP 7.3)<\/li>\n<li>Upgraded analysis : Elseif and Sequences are omitted in Level analysis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Upgraded support for magic properties<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.9.4<\/h2>\n<p class=\"date\">2019-09-09 &#8211; Star of Benefit<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Dump avoid storing multiple definition for the same class<\/li>\n<li>Added more native return definitions<\/li>\n<li>Adding UT for Complete\/<\/li>\n<li>Dump inventories are being moved to analysis class<\/li>\n<li>Moving more Themes =&gt; rulesets<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : Fixed several internal links<\/li>\n<li>Ambassador : Displays the levels of nesting in the code<\/li>\n<li>Ambassador : Upgraded compatibility report with PHP 7.4<\/li>\n<li>New report : Stubs<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : PHP 7.4 New Directives<\/li>\n<li>New analysis : Too many dimensions with array<\/li>\n<li>New analysis : Check concat and coalesce precedence<\/li>\n<li>New analysis : Adopt explode() third argument<\/li>\n<li>New analysis : Ternary and useless assignation<\/li>\n<li>New analysis : Nested ternary without parenthesis<\/li>\n<li>New analysis : Spread operator with arrays<\/li>\n<li>New analysis : Max level of indentation<\/li>\n<li>New analysis : Use Arrowfunctions<\/li>\n<li>Upgraded analysis : Clone with non object handles containers<\/li>\n<li>Upgraded analysis : Calling non-static methods statically<\/li>\n<li>Upgraded analysis : Unresolved Instanceof<\/li>\n<li>Upgraded analysis : Array_merge and variadic, extended to isset<\/li>\n<li>Checked unit tests : 3234 \/ 3259 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Last element of list() is not omitted anymore<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.9.3<\/h2>\n<p class=\"date\">2019-09-02 &#8211; Star of Longevity<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Created new Complete category, with data complement for analysis<\/li>\n<li>Refactored constant propagation<\/li>\n<li>Made code compatible with PHP 7.4<\/li>\n<li>Rename project_themas to project_rulesets<\/li>\n<li>Added support of -p with .exakat.yaml<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : reworked presentation for visibility suggestions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report covariance and contravariance for compatibility<\/li>\n<li>New analysis : no spread operator for hash values<\/li>\n<li>New analysis : self-closing tags are omitted by strip_tags<\/li>\n<li>New analysis : report Openssl_random_pseudo_byte second argument usage<\/li>\n<li>New analysis : CURLPIPE_HTTP1 is obsolete<\/li>\n<li>New analysis : removed PHP 7.4 directives<\/li>\n<li>New analysis : do not use &#8230; with array_merge without checks<\/li>\n<li>Updated analysis : added crc32c as hash algorithm<\/li>\n<li>Removed analysis : Removed Curly Arrays (double take)<\/li>\n<li>Checked unit tests : 3219 \/ 3240 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Extended OVERWRITE to Interfaces<\/li>\n<li>Extended support for class_alias()<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.9.2<\/h2>\n<p class=\"date\">2019-08-26 &#8211; Star of Prosperity<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Introduced a new set of analysis : Complete<\/li>\n<li>Cleaned code for PHP 7.4 usage<\/li>\n<li>Refactored Query to skip impossible Gremlin calls<\/li>\n<li>Now using Project for project names<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New report : classes dependencies (HTML version)<\/li>\n<li>New report : files dependencies (HTML and DOT version)<\/li>\n<li>Ambassador : datas -&gt; data<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : {} are deprecated in PHP 7.4<\/li>\n<li>New analysis : Don&#8217;t use ENT_IGNORE<\/li>\n<li>New analysis : fn is a PHP 7.4 keyword<\/li>\n<li>Updated analysis : Functions\/UseConstantAsArguments covers also password_hash()<\/li>\n<li>Updated analysis : printf arguments now handles positional formatters<\/li>\n<li>Checked unit tests : 3172 \/ 3199 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed precedence for left associativity<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.9.1<\/h2>\n<p class=\"date\">2019-08-19 &#8211; Star of Life<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed zip as code source<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : Fixed issues list for Favorites<\/li>\n<li>Owasp : switched dashboards<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Updated analysis : Loop Calling got one extra check<\/li>\n<li>Checked unit tests : 3148 \/ 3187 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.9.0<\/h2>\n<p class=\"date\">2019-07-29 &#8211; Ming Wenzhang of Jiayin<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added missing configuration file for tinkergraph 3.4<\/li>\n<li>Upgraded support for running exakat with PHP 7.4<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : array_key_exists() now report object usage<\/li>\n<li>New analysis : report mb_strrpos 4th argument<\/li>\n<li>New analysis : Reflection export are deprecated<\/li>\n<li>New analysis : Report classes without parents but with &#8216;parent&#8217;<\/li>\n<li>New analysis : Don&#8217;t use scalar as arrays<\/li>\n<li>New analysis : Report use of PHP 7.4 serialize method<\/li>\n<li>Updated analysis : Multiple Identical Keys checks for undefined keys first<\/li>\n<li>Updated analysis : Dont be too manual : extended to catch clauses<\/li>\n<li>Updated analysis : setcookie detection anchors the keyword at the beginning of the string<\/li>\n<li>Updated analysis : Failed Substr comparison now works with constants<\/li>\n<li>Updated analysis : Added support for continue 2 and 3<\/li>\n<li>Checked unit tests : 3147 \/ 3186 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for __serialize and __unserialize<\/li>\n<li>Added support for numeric literal separator<\/li>\n<li>Skip entirely unparsable files<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.8.9<\/h2>\n<p class=\"date\">2019-07-22 &#8211; Meng Feiqing of Jiachen<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Check on graphdb configuration : default to nogremlin<\/li>\n<li>Added support for baseline for project and report<\/li>\n<li>Moved more doc to ruleset<\/li>\n<li>Check on .git folder for update<\/li>\n<li>Added -version option for upgrade command<\/li>\n<li>Doctor honors .exakat.yml file<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report useless type of checks<\/li>\n<li>New analysis : Disconnected classes<\/li>\n<li>New analysis : Avoid using mb_detect_encoding()<\/li>\n<li>New analysis : Check that source and blind variables are different in foreach<\/li>\n<li>New analysis : ~ or ! favorite<\/li>\n<li>Updated analysis : Is Zero omits multiplications<\/li>\n<li>Updated analysis : Used Private Property is upgraded<\/li>\n<li>Updated analysis : Multiple Identical Keys : refactored<\/li>\n<li>Updated analysis : Undefined variables now skips extract, include, eval<\/li>\n<li>Checked unit tests : 3147 \/ 3166 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Refactored support for Foreach : each blind variable is in VALUE<\/li>\n<li>Upgraded precedence for ! (not)<\/li>\n<li>Propagate constants with assignations<\/li>\n<li>Fixed link to $this inside heredoc and co<\/li>\n<li>Fixed an edgecase where Static method call was confused with Newcall<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.8.8<\/h2>\n<p class=\"date\">2019-07-15 &#8211; Wei Yuqing of Jiawu<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Modernized tinkergraph support<\/li>\n<li>When pcntl is available, stubs are produced in a child process<\/li>\n<li>Removed duplicated methods<\/li>\n<li>Exported sequences to helpers<\/li>\n<li>More UT libraries are supported<\/li>\n<li>Federated BUSYTIMEOUT in constant<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador and all dependend reports were refactored : menu is configurable with Yaml<\/li>\n<li>Emissary is the upcoming configurable report.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New step : Load data from code<\/li>\n<li>New analysis : Variables used for setting aside value temporarily<\/li>\n<li>New analysis : Use PHP array_* functions, instead of loops<\/li>\n<li>Updated analysis : Unused methods now skips methods from PHP native interfaces (Arrayaccess)<\/li>\n<li>Updated analysis : No class for typehint is now omitting PHP and extensions classes<\/li>\n<li>Updated analysis : Switch to Switch applies to comparisons now<\/li>\n<li>Updated analysis : Close namingg was sped up significantly<\/li>\n<li>Updated analysis : array_column() suggestion was refined<\/li>\n<li>Updated analysis : Htmlentities parameters also support some parenthesis usage<\/li>\n<li>Updated analysis : Constant Scalar Expression only target specified expressions<\/li>\n<li>Updated analysis : Static Properties skip Virtual properties<\/li>\n<li>Checked unit tests : 3131 \/ 3155 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Refactored support for Exit and Die<\/li>\n<li>Added raw support for phpdoc<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.8.7<\/h2>\n<p class=\"date\">2019-07-08 &#8211; Hu Wenchang of Jiashen<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added bugs fixes up to 7.3.7<\/li>\n<li>New factory method for the graph<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Backward compatible check on generators (can&#8217;t return)<\/li>\n<li>New analysis : Report wrong return typehint<\/li>\n<li>New analysis : Use DateTimeImmutable<\/li>\n<li>New concept : Methods that throw errors<\/li>\n<li>Updated analysis : Recursive functions disambiguate methods<\/li>\n<li>Updated analysis : Refactored property\/variable confusion<\/li>\n<li>Updated analysis : Could typehint checks on type validations<\/li>\n<li>Updated analysis : Variable used once check for abstract methods<\/li>\n<li>Updated analysis : Array_merge in loops omits file_put_contents()<\/li>\n<li>Updated analysis : Simple Regex covers all special sequences, and unicode sequences<\/li>\n<li>Checked unit tests : 3131 \/ 3142 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Differentiated support for self and static in calls<\/li>\n<li>Moved Symfony support to its extension<\/li>\n<li>Reworked loading to make it parallels.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.8.6<\/h2>\n<p class=\"date\">2019-07-01 &#8211; Wei Yuqing of Jiawu<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for Tinkegraph 3.4<\/li>\n<li>Extended support for Dev<\/li>\n<li>Renamed Themes to Ruleset (WIP)<\/li>\n<li>Split several long running queries into smaller chunks<\/li>\n<li>Cached files to memory, write them once only<\/li>\n<li>Optimized sides queries : omitting them when possible<\/li>\n<li>Added count of issues in Analyse node<\/li>\n<li>Optimized loading by grouping by inV<\/li>\n<li>More coverage for Arrowfunction<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Dump : collect PHP cyclomatic complexity<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Dependant abstract classes<\/li>\n<li>New analysis : Don&#8217;t use Null or Boolean as an array<\/li>\n<li>New analysis : Infinite recursion<\/li>\n<li>Updated analysis : Raised levels<\/li>\n<li>Updated analysis : Method signature must be compatible<\/li>\n<li>Updated analysis : Access Private in Trait is OK<\/li>\n<li>Updated analysis : Recursive function<\/li>\n<li>Checked unit tests : 3099 \/ 3105 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Upgraded support for &#8216;Modules&#8217;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.8.5<\/h2>\n<p class=\"date\">2019-06-24 &#8211; Zhan Zijiang of Jiaxu<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed several bugs in the online documentation<\/li>\n<li>Started removing analysis, replacing with analysis<\/li>\n<li>Fixed path in docker PHP usage.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : Export full INI and YAML config to replicate audit<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Unused class constants<\/li>\n<li>New analysis : Could Use available Trait<\/li>\n<li>New analysis : literal that Could Be Constant<\/li>\n<li>Updated analysis : Access Private in Trait is OK<\/li>\n<li>Updated analysis : multiple identical argument is extended to closures, methods<\/li>\n<li>Updated analysis : ext\/rdkafka<\/li>\n<li>Updated analysis : No Hardcoded Hash is accelerated<\/li>\n<li>Updated analysis : Extended printf() check to constants<\/li>\n<li>Updated analysis : Optimized &#8216;redefined method&#8217;<\/li>\n<li>Updated analysis : Memoize Magic Call<\/li>\n<li>Updated analysis : set_locale requires constants<\/li>\n<li>Checked unit tests : 3099 \/ 3105 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added missing isModified to Foreach keys<\/li>\n<li>Class Method Definition handles old style constructor<\/li>\n<li>strict_types don&#8217;t yield a block<\/li>\n<li>Added typed values for magic constants<\/li>\n<li>Refactored new -&gt; constructor link for Self, Static, parent<\/li>\n<li>Added missing arguments count to Newcall<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.8.4<\/h2>\n<p class=\"date\">2019-06-17 &#8211; Wang Wenqing of Jiazi<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for PHP in docker images for compilation tests<\/li>\n<li>First prototype for Gremlin in a specific docker image<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : restored original URL<\/li>\n<li>Replaced &#8216;Complexity&#8217; =&gt; &#8216;Time To Fix&#8217;<\/li>\n<li>Replaced &#8216;Receipt&#8217; =&gt; Ruleset<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : regex with arrays<\/li>\n<li>New analysis : Complex property names<\/li>\n<li>New analysis : array_key_exists speed up<\/li>\n<li>New analysis : curl_version forbidden argument<\/li>\n<li>New analysis : PHP 7.4 new functions, classes and constants<\/li>\n<li>Fixed analysis : Long Variable<\/li>\n<li>Updated analysis : printf() format check extended to constants<\/li>\n<li>Updated analysis : Written only variables is extended to static and global<\/li>\n<li>Updated analysis : refactored &#8216;Make default&#8217;<\/li>\n<li>Updated analysis : &#8216;Wrong number of arguments&#8217; is extended to methods<\/li>\n<li>Updated analysis : &#8216;Use coalesce&#8217; checks for<\/li>\n<li>Updated analysis : Refactored &#8216;Nested ifthen&#8217; to have a parameter<\/li>\n<li>Updated analysis : Extended &#8216;Class Usage&#8217; to return typehint<\/li>\n<li>Updated analysis : Sped up &#8216;Used Classes&#8217;<\/li>\n<li>Checked unit tests : 2993 \/ 3071 test pass (97% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Upgraded handling of declare with strict_types<\/li>\n<li>Support for magic properties across classes and traits<\/li>\n<li>Added support for parent with properties<\/li>\n<li>Properties are handled with static and normal at the same time<\/li>\n<li>Fixed virtualproperties with static keyword (self and parent are ok)<\/li>\n<li>Added argument count for &#8216;new A&#8217;, without parenthesis<\/li>\n<li>Restored old break behavior for PHP 5 and older.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.8.3<\/h2>\n<p class=\"date\">2019-06-10 &#8211; Jade Man of Yang<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Extension docs show version numbers<\/li>\n<li>Manual uses internal links<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New report : SARB<\/li>\n<li>Updated report : Ambassador list number of arguments in natural order<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : from substr() to trim()<\/li>\n<li>New analysis : suggest making magic property a concrete one (2 ways)<\/li>\n<li>New analysis : no array auto-append<\/li>\n<li>Updated analysis : &#8216;Scalar or object property&#8217; refactored<\/li>\n<li>Updated analysis : &#8216;Multiple identical keys&#8217; get a new check on intval, broadened to constants<\/li>\n<li>Updated analysis : &#8216;Indirect injection&#8217; accelerated<\/li>\n<li>Updated analysis : &#8216;Could be class constant&#8217; accelerated<\/li>\n<li>Updated analysis : &#8216;Never used property&#8217; refactored<\/li>\n<li>Updated analysis : &#8216;Modern empty&#8217; modernized and broadened<\/li>\n<li>Updated analysis : &#8216;Useless check&#8217; skips isset\/empty as they may be useful<\/li>\n<li>Updated analysis : &#8216;Identical methoods&#8217; skips abstract methods<\/li>\n<li>Updated analysis : &#8216;No Count Zero&#8217; also uses sizeof(), skips switch()<\/li>\n<li>Checked unit tests : 2993 \/ 3071 test pass (97% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Upgraded local definitions for properties to Load phase<\/li>\n<li>Handle static keyword in closures<\/li>\n<li>Moved &#8216;Real&#8217; to &#8216;Float&#8217;<\/li>\n<li>Created &#8216;Scalartypehint&#8217; atom<\/li>\n<li>Fixed intval, boolval for \\true and \\false<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.8.2<\/h2>\n<p class=\"date\">2019-06-03 &#8211; Zhao Ziyu of Dingchou<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Refactored &#8216;Update&#8217; command, to VCS<\/li>\n<li>Collect missing definitions counts<\/li>\n<li>Report handles a list of analysis names<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : No Need To Get_Class<\/li>\n<li>New analysis : Report identical inherited methods<\/li>\n<li>New analysis : Function returning -1 in case of error<\/li>\n<li>Updated analysis : TypeHint must be returned, doesn&#8217;t apply to abstract methods or interface methods<\/li>\n<li>Updated analysis : &#8216;Could Use Interface&#8217; also checks for static and visibility<\/li>\n<li>Updated analysis : &#8216;Concat empty&#8217; skips variables<\/li>\n<li>Checked unit tests : 3024 \/ 3048 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Created &#8216;virtual&#8217; properties, for limiting children agglomerations<\/li>\n<li>Fixed normalized code for use traits<\/li>\n<li>Added DEFAULT to all variable definitions<\/li>\n<li>Connect strings to class definitions<\/li>\n<li>Handle variable in &#8216;compact&#8217;, when they are static<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.8.1<\/h2>\n<p class=\"date\">2019-05-27 &#8211; Zhang Wentong of Dinghai<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed Symlink destination<\/li>\n<li>Added collecting classes children, traits and interfaces counts<\/li>\n<li>Added support for constants and functions in modules<\/li>\n<li>Added missing functions in data<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New report : exakatYaml, which help configuring exakat<\/li>\n<li>New report : Yaml<\/li>\n<li>New report : Top10<\/li>\n<li>Updated report : Json, text and xml get &#8216;fullcode&#8217;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Updated analysis : Should use self is extended to parent classes<\/li>\n<li>Updated analysis : Should use prepared statement now skips some SQL queries<\/li>\n<li>Checked unit tests : 3024 \/ 3048 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.8.0<\/h2>\n<p class=\"date\">2019-05-20 &#8211; Zang Wengong of Dingyou<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added missing native PHP functions<\/li>\n<li>Restored anchor for ignore_dirs[] configuration<\/li>\n<li>Removed more MAX_LOOPING usage<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : removed { &amp; @ } artefacts from globals<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Function returning -1 in case of error<\/li>\n<li>New analysis : Report PHP 7.4 unpacking inside array<\/li>\n<li>New analysis : Report PHP 7.4 new functions and fn<\/li>\n<li>New analysis : Useless arguments<\/li>\n<li>New analysis : Addition and concatenation precedence for PHP 7.4<\/li>\n<li>New analysis : report concatenation of empty strings<\/li>\n<li>New analysis : casting has precedence over ternary<\/li>\n<li>New analysis : report already used traits<\/li>\n<li>New analysis : report missing traits in use expression<\/li>\n<li>Updated analysis : isset on whole arrays : extended analysis to Phpvariables<\/li>\n<li>Updated analysis : SQLITE3 requires single quotes<\/li>\n<li>Updated analysis : Dir then slash : extended to constants<\/li>\n<li>Updated analysis : Variable Strange Name extended to strange types<\/li>\n<li>Updated analysis : Possible interface&#8217;s analysis is sped up<\/li>\n<li>Checked unit tests : 3021 \/ 3045 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed fullcode of Usetrait<\/li>\n<li>Extended method definitions to traits<\/li>\n<li>Extended fluent interface detection to parents<\/li>\n<li>Fixed dump for visibility change<\/li>\n<li>Handle method aliases in use expression (as)<\/li>\n<li>Better noDelimiter for double quotes strings<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.7.9<\/h2>\n<p class=\"date\">2019-05-13 &#8211; Shi Shutong of Dingwei<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Upgraded list of functions by extension : openssl, math, hrtime<\/li>\n<li>Added global atom to track all globals<\/li>\n<li>Rewrote several Dump queries with DSL<\/li>\n<li>Added support for Notice in Phpexec<\/li>\n<li>Added support for .exakat.ini and .exakat.yaml<\/li>\n<li>Added support for arrow functions : fn =&gt;<\/li>\n<li>Added support for spread operator in arrays [&#8230;[1,2,3]]<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Inventories : added &#8216;inclusions&#8217; and &#8216;global variables&#8217;<\/li>\n<li>Ambassador : added global variables<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : support for ext\/ffi, uuid<\/li>\n<li>Updated analysis : Nested Ternary handles parenthesis<\/li>\n<li>Updated analysis : Static loops is extended to references and arrays<\/li>\n<li>Updated analysis : Recursive function is extended to Magic methods and Closures<\/li>\n<li>Checked unit tests : 3014 \/ 3019 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Moved &#8216;is_in_ignored_dir&#8217; to a property<\/li>\n<li>Cleaned getFullnspath() call in Load<\/li>\n<li>Fixed latent bug on Function fullnspath<\/li>\n<li>Heredoc and Nowdoc are reported as constant if needed<\/li>\n<li>Isset() is not read<\/li>\n<li>Ignore PHP notices when linting<\/li>\n<li>Globals are now centralised across a repository<\/li>\n<li>Extended definitions for Virtualproperties<\/li>\n<li>Removed double DEFINITION link with new<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.7.8<\/h2>\n<p class=\"date\">2019-05-06 &#8211; Cui Juqing of Dingyi<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>renamed test.php to ut.php in tests<\/li>\n<li>reorganized destinations folders<\/li>\n<li>organized exakat for &#8216;inside code&#8217; audit<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : support for libsvm<\/li>\n<li>Updated analysis : Multiple unset() handles unset() at the beginning of the scope<\/li>\n<li>Updated analysis : undefined static class now accounts for PHP and module classes<\/li>\n<li>Checked unit tests : 2961 \/ 2995 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Extended class usage to static::class.<\/li>\n<li>refactored 2 analysis for speed : double instruction and double assignations<\/li>\n<li>fixed recent bug where Project token is twice.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.7.7<\/h2>\n<p class=\"date\">2019-04-29 &#8211; Sima Qing of Dingmao<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Upgraded to gremlin-php 3.1.1<\/li>\n<li>Moved autoload into its own namespace<\/li>\n<li>Started extending themes to modules<\/li>\n<li>Skip external libraries when unit testing<\/li>\n<li>Dump got one more query moved to DSL<\/li>\n<li>Fixed build for overwritten methods, extended to magic methods<\/li>\n<li>Load tokens by batch (5000+ tokens), not by file.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Security : integer conversion<\/li>\n<li>New analysis : implode() with one argument<\/li>\n<li>Updated analysis : Invalid Regex handles \\\\ more precisely<\/li>\n<li>Updated analysis : delimiter detection was checked for all of them<\/li>\n<li>Checked unit tests : 2947 \/ 2983 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Upgraded Fallback detection for functions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.7.6<\/h2>\n<p class=\"date\">2019-04-22 &#8211; Jade Maiden of Yin<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Refactored Class definition with return typehint<\/li>\n<li>Added configuration for including development extensions.<\/li>\n<li>Extended LoadFinal typehint hunting<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Phpcsfixer : new report<\/li>\n<li>Ambassador : report usage of overridden PHP functions<\/li>\n<li>Ambassador : new favorite : variable name in catch clause<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : array_merge and ellipsis should use coalesce<\/li>\n<li>New analysis : Report overridden PHP native functions<\/li>\n<li>New analysis : Merge all unset() into one<\/li>\n<li>Updated analysis : Added missing constant for curl, pgsql, openssl<\/li>\n<li>Updated analysis : Variadic are not variable arguments<\/li>\n<li>Updated analysis : Useless Reference argument extended to foreach()<\/li>\n<li>Updated analysis : Use Constant also covers pi()<\/li>\n<li>Updated analysis : Inclusion Wrong Case handles dirname with 2nd argument<\/li>\n<li>Updated analysis : Useless Argument : handles some edge cases with arrays<\/li>\n<li>Checked unit tests : 2947 \/ 2975 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Upgraded handling of isRead and isModified attributes<\/li>\n<li>Changed variadic argument counts in method declarations<\/li>\n<li>Fixed original value in &#8216;Sign&#8217;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.7.5<\/h2>\n<p class=\"date\">2019-04-15 &#8211; Xue King Zhuanlun<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Cleaned unused variables<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : bugfixes report version 7.3, dropped 5.6 and 5.5<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Updated analysis : Already interface : extended to interface parents<\/li>\n<li>Updated analysis : Else if to elseif : extended to one-liners<\/li>\n<li>Updated analysis : No reference for ternary was extended<\/li>\n<li>Updated analysis : Implements is for interface<\/li>\n<li>Updated analysis : Refactored Is a Magic Property<\/li>\n<li>Updated analysis : Refactored Conditional structures for constants<\/li>\n<li>Checked unit tests : 2926 \/ 2950 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Link properties to magicmethod<\/li>\n<li>Deduplicated virtual properties<\/li>\n<li>Added isRead and IsModified properties. Omitting the corresponding analysis.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.7.4<\/h2>\n<p class=\"date\">2019-04-08 &#8211; Lu King Pingdeng<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>reports, themes may be specified multiple times<\/li>\n<li>&#8216;project&#8217; command also work on themes and report from command line<\/li>\n<li>Added htmlpurifier in auto-ignored libraries<\/li>\n<li>Counting definitions, omitting Virtualproperties<\/li>\n<li>Automatically detect identical files<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Inventories are grouped by values, sorted by count<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Updated analysis : This is for class : extended analysis to self and parent<\/li>\n<li>Updated analysis : Undefined Classes<\/li>\n<li>Updated analysis : Refactored Defined Parent MP<\/li>\n<li>Updated analysis : Redefined PHP function is restricted to global scope<\/li>\n<li>Updated analysis : Could Use Alias also covers functions, constants.<\/li>\n<li>Updated analysis : Refined SQL detection<\/li>\n<li>Fixed step : goToALlParentsTrait missed some of the parent<\/li>\n<li>Checked unit tests : 2916 \/ 2944 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Removed impossible implementations of traits<\/li>\n<li>Fixed functioncalls&#8217; &#8216;absolute&#8217; property<\/li>\n<li>Refined parent&#8217;s definitions<\/li>\n<li>Trait also sports virtualproperties<\/li>\n<li>Virtualproperties now respect visibilities<\/li>\n<li>Distinguish Variables from Staticpropertynames<\/li>\n<li>Added missing DEFINITION for Use (namespaces)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.7.3<\/h2>\n<p class=\"date\">King Dushi, 2019-04-01 &#8211; Huang<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>New command &#8216;show&#8217; that display project creation command<\/li>\n<li>Refactored UT detection mechanism<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : report identical files in the code<\/li>\n<li>Ambassador : global variable inventory is now grouped by name<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Updated analysis : PPPDeclaration style : handles Virtualproperties<\/li>\n<li>Updated analysis : Closure2string : extended analysis<\/li>\n<li>Updated analysis : Non-Ascii variable skips { }, &amp; and @<\/li>\n<li>Updated analysis : Could Be Static exclude abstract methods<\/li>\n<li>Updated analysis : MismatchedTypehint : handles methodcalls and class hierarchy<\/li>\n<li>Updated analysis : Could Use Try : refined analysis to avoid literals<\/li>\n<li>Updated analysis : Hidden use, handles Virtualproperty<\/li>\n<li>Updated analysis : Classes, wrong case, handles FQN<\/li>\n<li>Checked unit tests : 2846 \/ 2926 test pass (97% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Moved creation of Virtualproperty early, to catch more situations<\/li>\n<li>Virtualproperty mimic Propertydefinition<\/li>\n<li>Added extra check when roaming the classes tree<\/li>\n<li>Handles Sign constant values correctly<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.7.2<\/h2>\n<p class=\"date\">2019-03-25 &#8211; Dong King Taishan<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Restored the external library checker<\/li>\n<li>Added support for extension&#8217;s CIT (Symfony, Drupal)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : added Suggestions theme to docs.<\/li>\n<li>Perfile : New report, text, per file<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report potential &#8216;unsupported operand type&#8217;<\/li>\n<li>New analysis : Check for existence with __call() and __callstatic<\/li>\n<li>Updated analysis : Wrong number of arguments (methods) upgraded<\/li>\n<li>Updated analysis : Could Be Static ignores empty methods, constants methods<\/li>\n<li>Updated analysis : Added Variable to possibly useless expression<\/li>\n<li>Updated analysis : Constant names are detected based on available noDelimiter<\/li>\n<li>Updated analysis : Abstract classes may have no abstract methods<\/li>\n<li>Checked unit tests : 2889 \/ 2912 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added link between __clone and clone<\/li>\n<li>Now handling functions and constants when ignored<\/li>\n<li>Fixed dynamic constants in collector<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.7.1<\/h2>\n<p class=\"date\">2019-03-18 &#8211; Bi King Biancheng<\/p>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : report lines that concentrate lots of issues<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Extended GoToAllImplements to extended interfaces<\/li>\n<li>Updated analysis : NoScream usage, with authorized functioncall list like fopen<\/li>\n<li>Updated analysis : HiddenUse with support for virtual properties<\/li>\n<li>Checked unit tests : 2867 \/ 2900 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for &#8216;Virtualproperties&#8217;<\/li>\n<li>Harmonized file escaping feature<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.7.0<\/h2>\n<p class=\"date\">2019-03-11 &#8211; Bao King Yama<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added auto-documenting &#8216;ignored&#8217; cit to weed out obvious false positive<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Made Diplomat the default report<\/li>\n<li>Added History report : it stores metrics from audit to audit<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Identify self transforming variables ($x = foo($x))<\/li>\n<li>New analysis : Report unclonable variables<\/li>\n<li>Updated analysis : Undefined Classes, Interfaces and Trait now omit &#8216;ignored&#8217; cit from folders<\/li>\n<li>Updated analysis : Inconsistent usage is refactored for properties<\/li>\n<li>Updated analysis : Useless expression, with clone new x<\/li>\n<li>Updated analysis : Only Variable For Reference accepts $this, $_GET<\/li>\n<li>Updated analysis : Lost References was modernized<\/li>\n<li>Checked unit tests : 2854 \/ 2884 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Refactored support for Staticmethod (in a trait&#8217;s use)<\/li>\n<li>Added definitions for trait&#8217;s use<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.6.9<\/h2>\n<p class=\"date\">2019-03-04 &#8211; Lu King Wuguan<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Optimized Dump when navigating the links to the File Atom<\/li>\n<li>Refactored LoadFinal into separate classes<\/li>\n<li>Upgraded to Tinkergraph 3.3.5<\/li>\n<li>Added options to cleandb to stop and start gremlin from exakat<\/li>\n<li>Skip the task if no analysis has to run<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report inconsistent usage of properties or variables<\/li>\n<li>New analysis : Typehinted return must return<\/li>\n<li>Updated analysis : Variables used once handles closure (use) correctly<\/li>\n<li>Updated analysis : Is Zero was refactored partially (WIP)<\/li>\n<li>Updated analysis : Bad Typehint relay got a fix<\/li>\n<li>Updated analysis : Function Subscripting is only suggested for one usage<\/li>\n<li>Updated analysis : Lost References was modernized<\/li>\n<li>Checked unit tests : 2854 \/ 2881 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added definition for injected properties<\/li>\n<li>Fixed sack() for subqueries<\/li>\n<li>$this is not a classic variable<\/li>\n<li>Removed double DEFINITION links<\/li>\n<li>Fixed edge case with define() at the end of a script<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.6.8<\/h2>\n<p class=\"date\">2019-02-25 &#8211; Yu King Songdi<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for PHP 8.0<\/li>\n<li>Fixed Constant FNP<\/li>\n<li>Advance progressbar when ignoring files<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : report usage of factories<\/li>\n<li>Collect stats about Foreach usage<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report violation of law of Demeter<\/li>\n<li>New analysis : Report removed constants and functions in PHP 8.0<\/li>\n<li>Updated analysis : Refactored Nullable Typehint<\/li>\n<li>Checked unit tests : 2851 \/ 2872 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed edge case for Logical with strings<\/li>\n<li>Reduced max level of looping in GoToAllParents<\/li>\n<li>Distinguish $$ and ${$<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.6.7<\/h2>\n<p class=\"date\">2019-02-18 &#8211; Li King Chujiang<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Documentation covers more PHP functions<\/li>\n<li>Added some missing PHP functions<\/li>\n<li>Fixed destination folder for extensions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : limited size of default values in visibility report.<\/li>\n<li>Ambassador : reporting class depth<\/li>\n<li>Ambassador : reporting dynamically created constants<\/li>\n<li>Diplomat : leanner, meaner version of Ambassador<\/li>\n<li>New category : Top 10 classic mistakes<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report when relayed typehint are not the sames<\/li>\n<li>Updated analysis : Regex now handles local variables and constants<\/li>\n<li>Updated analysis : Variables Used Once now covers closures and use<\/li>\n<li>Checked unit tests : 2846 \/ 2867 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Defineconstant may be constant<\/li>\n<li>Fixed handling of Nullable for typehint<\/li>\n<li>Started preparing for Gremlin 3.4.0 : WIP<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.6.6<\/h2>\n<p class=\"date\">2019-02-11 &#8211; Jiang King Qinguang<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Removed FetchContext() from DSL<\/li>\n<li>Added options to follow constants from atomIs.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Now dumps magic methods<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report insufficient interfaces in typehint<\/li>\n<li>Updated analysis : Class constant now ignore empty classes<\/li>\n<li>Checked unit tests : 2837 \/ 2858 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Moved &#8216;Define&#8217; to its own atom<\/li>\n<li>Upgraded Logical to hanlde Strings as PHP<\/li>\n<li>Fixed T_POWER =&gt; T_POW<\/li>\n<li>Refactored calculation for globalpath<\/li>\n<li>Fixed edgecase with endswitch;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.6.5<\/h2>\n<p class=\"date\">2019-02-04 &#8211; Mahagate<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added CVS as an external service<\/li>\n<li>Graph GSNeo4j export variable for shell access. putenv is not sufficient<\/li>\n<li>Dump : report class name, not its code<\/li>\n<li>Extended listAllThemes to extensions<\/li>\n<li>Fixed bug in extension loader with phar<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : restored file dependencies tree<\/li>\n<li>Ambassador : fixed altered directive filename<\/li>\n<li>Ambassador : added direct link to docs<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : arrays that are initialized with strings<\/li>\n<li>New analysis : Avoid Lone variables as conditions<\/li>\n<li>New analysis : Added support for weakref and pcov<\/li>\n<li>Updated analysis : extended regex to arrays in preg_* calls<\/li>\n<li>Updated analysis : Implicit globals now also marks the variable in global space<\/li>\n<li>Updated analysis : Add Zero, Multiply by One also cover 2 * $x = 1;<\/li>\n<li>Updated analysis : Could Use Interface now takes into account PHP interfaces, and classes first level.<\/li>\n<li>Updated analysis : Relay Functions now omits calls to parent&#8217;s __construct and __destruct<\/li>\n<li>Checked unit tests : 2830 \/ 2852 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.6.4<\/h2>\n<p class=\"date\">2019-01-28 &#8211; Parasamgate<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for CVS as a VCS<\/li>\n<li>Upgraded support for tar as a VCS<\/li>\n<li>Added support modification counts by files<\/li>\n<li>Added first tracking for closures<\/li>\n<li>Upgraded Tinkergraph driver<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added Atoms in the documentations<\/li>\n<li>Extra protection for Class Changes<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Updated analysis : Use-arguments are now counted as arguments<\/li>\n<li>Updated analysis : Max Argument check was refactored<\/li>\n<li>Updated analysis : IsModified now takes into account extensions<\/li>\n<li>Updated analysis : Should Use This now exclude empty methods<\/li>\n<li>Updated analysis : undefined classes now support PHP 7.4 typed properties<\/li>\n<li>Updated analysis : added missing scalar PHP types<\/li>\n<li>Updated analysis : uncaught exceptions now cover parents<\/li>\n<li>Updated analysis : refactored incompatibility checks for methods<\/li>\n<li>Checked unit tests : 2824 \/ 2841 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Refactored alternative ending, removed extra VOID<\/li>\n<li>Upgraded contexts and their nesting<\/li>\n<li>Added extra checks on variables names<\/li>\n<li>Added support for ??= (PHP 7.4)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.6.3<\/h2>\n<p class=\"date\">2019-01-21 &#8211; Paragate<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Better presentation for exakat extensions<\/li>\n<li>Added build.xml for Jenkins<\/li>\n<li>Fixed copyright years<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : fixed class name for Phpcompilation<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : assign and compare at the same time<\/li>\n<li>Updated analysis : uncaught exceptions now cover parents<\/li>\n<li>Updated analysis : strpos too much is extended to strrpos and strripos<\/li>\n<li>Updated analysis : Refactored Indirect injections for more refined reports<\/li>\n<li>Updated analysis : Empty Block doesn&#8217;t omit Ifthen anymore<\/li>\n<li>Updated analysis : Implemented methods are public mistook interface methods<\/li>\n<li>Updated analysis : Object Reference omits arguments that are wholly assigned<\/li>\n<li>Checked unit tests : 2808 \/ 2826 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for PHP 7.4 typed properties (needs PHP 7.4-dev)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.6.2<\/h2>\n<p class=\"date\">2019-01-14 &#8211; Silver Headed Gate<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed infinite loop when an option missed a value<\/li>\n<li>Produce phpversion in config.ini, but leave it commented<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : colored syntax for visibility report<\/li>\n<li>Ambassador : inventory reports now display number of usages<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Updated analysis : Added support for PHP 7.2.14<\/li>\n<li>Updated analysis : Avoid Using Class handles \\<\/li>\n<li>Updated analysis : Unused Functions works with multiple identical functions<\/li>\n<li>Checked unit tests : 2795 \/ 2817 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed bug that mixed T_OR and T_XOR<\/li>\n<li>Fixed bug that missed intval for Power<\/li>\n<li>Handles multiple definitions of functions<\/li>\n<li>Removed one Void too many with closing tag<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.6.1<\/h2>\n<p class=\"date\">2019-01-07 &#8211; Golden Light Gate<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Upgraded documentation for Extensions<\/li>\n<li>Upgraded processing of files, specially with special chars<\/li>\n<li>Project stops when no token are found<\/li>\n<li>Storing hash for each files. RFU.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : added support for class constant&#8217;s changes<\/li>\n<li>Ambassador : added classSize report<\/li>\n<li>Ambassador : &#8216;New issues&#8217; now takes line difference into account<\/li>\n<li>Themes are better dumped<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : array_key_exists() is faster in PHP 7.4<\/li>\n<li>New analysis : partial report from preg_match()<\/li>\n<li>Updated analysis : Avoid Using Class handles \\<\/li>\n<li>Updated analysis : Class Usage uses class_alias()<\/li>\n<li>Updated analysis : Empty traits<\/li>\n<li>Updated analysis : Unused arguments now skips __set()<\/li>\n<li>Updated analysis : Path strings<\/li>\n<li>Updated analysis : Missing include handles more concatenations<\/li>\n<li>Checked unit tests : 2792 \/ 2812 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed precedence for identical operators<\/li>\n<li>Fixed bug with ?&gt; inside switch<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.6.0<\/h2>\n<p class=\"date\">2018-12-31 &#8211; VirupakSa<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>VCS are not tested when they are not used<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Updated analysis : Php Reserved names ignores variable variables<\/li>\n<li>Updated analysis : Array not using a constant, with Heredoc<\/li>\n<li>Updated analysis : Long arguments<\/li>\n<li>Updated analysis : Empty With Expression ignores simple assignations<\/li>\n<li>Refactored analysis : Callback needs returns<\/li>\n<li>Refactored analysis : No Return used<\/li>\n<li>Checked unit tests : 2780 \/ 2805 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed regression with Yield and =&gt;<\/li>\n<li>Fixed edge case &#8220;$a[-0x00]&#8221;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.5.9<\/h2>\n<p class=\"date\">2018-12-24 &#8211; Dhrtarastra<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Use PHP in project config for default PHP version<\/li>\n<li>cleandb uses -p<\/li>\n<li>Moved projects\/.exakat to projects\/&lt;-p&gt;\/.exakat folders<\/li>\n<li>Using $config and not more hardcoded tinkergraph<\/li>\n<li>Extra check on doctor<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : extra check for &#8216;previous&#8217; report<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded analysis : Empty With Expression skip a few false positive<\/li>\n<li>Checked unit tests : 2770 \/ 2795 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed edgecase for methods named &#8216;class&#8217;<\/li>\n<li>Fixed class name in Project<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.5.8<\/h2>\n<p class=\"date\">2018-12-17 &#8211; Virudhaka<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Handles themas provided by extensions<\/li>\n<li>Added busyTimeout for dump.sqlite<\/li>\n<li>Reduced size of thema tables<\/li>\n<li>Docs handle parameter dynamically<\/li>\n<li>Added &#8216;update&#8217; for extensions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : added a &#8216;Path&#8217; inventory, with file paths<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Closures that are identical<\/li>\n<li>Upgraded analysis : Url and SQL detection, case sensitivity<\/li>\n<li>Upgraded analysis : Could Use array_fill_keys<\/li>\n<li>Upgraded analysis : Undefined functions doesn&#8217;t miss functions inside classes, handles interfaces<\/li>\n<li>Upgraded analysis : Empty Functions better handles return;<\/li>\n<li>Upgraded analysis : Long Argument may be configured<\/li>\n<li>Upgraded analysis : Fixed bug with empty include path<\/li>\n<li>Checked unit tests : 2770 \/ 2795 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added FNP to strings<\/li>\n<li>First link between method and definition with typehint<\/li>\n<li>Support for class_alias<\/li>\n<li>Fixed edge case with use ?&gt;<\/li>\n<li>Fixed variable in string behavior for $this and $php variables<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.5.7<\/h2>\n<p class=\"date\">2018-12-10 &#8211; Vaisravana<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Extended Dump to support aliased methods<\/li>\n<li>Support for SQLITE in extensions<\/li>\n<li>Moved each framework to extensions<\/li>\n<li>Added Laravel extension<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Documentation\n<ul>\n<li>First version for the Extension chapter<\/li>\n<li>Fixed mysterious &#8216; in the docs<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : added a &#8216;New issues&#8217; section, with new analysis<\/li>\n<li>Ambassador : added trait matrix<\/li>\n<li>Ambassador : fixed an infinite loop when trait include themselves in cycles<\/li>\n<li>Added more message count to several reports<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : method could be static<\/li>\n<li>New analysis : multiple inclusion of traits<\/li>\n<li>New analysis : avoid self using traits<\/li>\n<li>New analysis : ext\/wasm and ext\/async<\/li>\n<li>Upgraded analysis : No Hardcoded Hash, skip hexadecimal numbers<\/li>\n<li>Upgraded analysis : Defined properties extends to traits<\/li>\n<li>Upgraded analysis : PSS outside a class, when PSS are in strings<\/li>\n<li>Upgraded analysis : Access private works with methods (not just static)<\/li>\n<li>Checked unit tests : 2772 \/ 2785 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed bug in Dump, when nothing to clean<\/li>\n<li>Fixed edge bug on Callable detection<\/li>\n<li>Extended support for self, static and parent, in typehint and new<\/li>\n<li>Fixed precedence of yield and yield from<\/li>\n<li>Fixed handling of throw at the end of a script<\/li>\n<li>Added support to solve conflict on traits<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.5.6<\/h2>\n<p class=\"date\">2018-12-03 &#8211; Jingang<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Moved all framework to extensions. WIP.<\/li>\n<li>Code cleaning<\/li>\n<li>Refactored the analysis dependency sorting<\/li>\n<li>Now display progress bar for files<\/li>\n<li>Fixed configuration for directories and files<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Fixed FileDependecy and DependencyWheel, to actually count messages<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Added a lot more new method descriptions for PHP native classes<\/li>\n<li>New analysis : suggestion simplification for !isset($a) || !isset($a[1])<\/li>\n<li>New analysis : Useless Trait alias<\/li>\n<li>New analysis : report usage of ext\/sdl<\/li>\n<li>Upgraded analysis : Refactored IsZero, to handle assignations and parenthesis<\/li>\n<li>Upgraded analysis : pack format is better checked<\/li>\n<li>Checked unit tests : 2759 \/ 2771 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed a missing fullnspath for origin in Use for Traits<\/li>\n<li>Handles simple aliases for traits methods<\/li>\n<li>Fixed mishandling of variables inside strings<\/li>\n<li>Fixed support of negative numbers inside strings<\/li>\n<li>Fixed bug with yield inside an array<\/li>\n<li>Fixed strange case with define and integers as constant names<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.5.5<\/h2>\n<p class=\"date\">2018-11-25 &#8211; Ratnadhvaja<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Initial version of Exakat extensions<\/li>\n<li>Moved processing of 2-tokens files to Load<\/li>\n<li>Speed up CSV creations<\/li>\n<li>Upgrades are read from https, no http<\/li>\n<li>Moved loading&#8217;s sqlite to memory for speed gain<\/li>\n<li>Doctor now auto-create test folder<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New report : Php city. See your PHP code as a city<\/li>\n<li>Ambassador : Appinfo() now reports keywords used as method or property<\/li>\n<li>Fixed reported names of properties<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : checks some HTTP headers for security<\/li>\n<li>New analysis : Use _file() functions, not file_get_contents()<\/li>\n<li>New analysis : Optimize looks for fgetcsv()<\/li>\n<li>Upgraded analysis : Several refactored analysis<\/li>\n<li>Checked unit tests : 3083 \/ 3096 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed encoding error in loading, for clone types.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.5.4<\/h2>\n<p class=\"date\">2018-11-19 &#8211; Mahakasyapa<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added error message for memory limit<\/li>\n<li>Added GC to Project action<\/li>\n<li>Migrated Melis to extension<\/li>\n<li>Dumping data is now done en masse<\/li>\n<li>Analysers now handle side-queries<\/li>\n<li>Clear message in case of memory limit<\/li>\n<li>Doctor doesn&#8217;t stop at missing helpers<\/li>\n<li>VCS leak less errors<\/li>\n<li>Added support for 7z<\/li>\n<li>Extended validation for themas<\/li>\n<li>Restored Tinkergraph driver<\/li>\n<li>Upgrade logs with extra reports<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report problems with class constant visibilities<\/li>\n<li>New analysis : Avoid self, parent and static in interfaces<\/li>\n<li>Upgraded analysis : Variable reuse now skips empty arrays<\/li>\n<li>Checked unit tests : 3077 \/ 3090 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed bug where variable was mistaken for a string inside strings<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.5.3<\/h2>\n<p class=\"date\">2018-11-12 &#8211; Ananda<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Extended results to methods, traits<\/li>\n<li>Added support for PHP 7.2.12<\/li>\n<li>&#8216;master&#8217; is not used anymore as default branch<\/li>\n<li>Fixed creation of initial config\/exakat.ini<\/li>\n<li>Fixed handling badly written exakat.ini or PHP binary paths<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : report classes that could be final or abstract<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Property Used Once : now includes redefined functions<\/li>\n<li>New analysis : iterator_to_array() should use yield with keys or array_merge()<\/li>\n<li>New analysis : Don&#8217;t loop on yield : use yield from<\/li>\n<li>Upgraded analysis : Dependant trait now include parent-traits<\/li>\n<li>Checked unit tests : 3080 \/ 3093 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Changed handling of variable that are both global AND local<\/li>\n<li>Disambiguated variables and properties<\/li>\n<li>Extended OVERWRITE to constants and methods<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.5.2<\/h2>\n<p class=\"date\">2018-11-05 &#8211; Master Puti<\/p>\n<ul>\n<li>Report\n<ul>\n<li>Fixed storage of themes in dump.sqlite<\/li>\n<li>Ambassador : report nothing when there are no trait, interface or class in the tree.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : idn_to_ascii() will get new default<\/li>\n<li>New analysis : support for decimal extension<\/li>\n<li>New analysis : support for psr extension<\/li>\n<li>Upgraded analysis : Extended support to PHP native exceptions<\/li>\n<li>Upgraded analysis : Could use typecast now handles intval() second param<\/li>\n<li>Upgraded analysis : Variable strange names avoids properties<\/li>\n<li>Checked unit tests : 3058 \/ 3085 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Upgraded support for arrays inside strings (string\/constant distinction)<\/li>\n<li>Added DEFINITION for constant() and defined()<\/li>\n<li>Fixed value of line for some placeholder definition<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.5.1<\/h2>\n<p class=\"date\">2018-10-29 &#8211; Eighteen Arhats<\/p>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : could use basename() second args<\/li>\n<li>Upgraded analysis : Variables strange names do not report &#8230;<\/li>\n<li>Checked unit tests : 3061 \/ 3079 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Moved TRAILING as a property<\/li>\n<li>Moved NULLABLE as a property<\/li>\n<li>Sync ALIAS with AS<\/li>\n<li>Fixed link between Use expression when using an alias<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.5.0<\/h2>\n<p class=\"date\">2018-10-22 &#8211; Pilanpo Bodhisattva<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed &#8221; in the examples of the manual<\/li>\n<li>Upgraded stability with new history testing<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : now report interface and trait hierarchy<\/li>\n<li>Ambassador : new format inventory for pack and printf<\/li>\n<li>Dump : Fixed list of traits<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Could Use Try, for native calls that may produce an exception<\/li>\n<li>New analysis : idn_to_ascii() will get new default<\/li>\n<li>Upgraded analysis : Undefined variables exclude $this<\/li>\n<li>Upgraded analysis : Variables used once avoid properties<\/li>\n<li>Upgraded analysis : ext\/json : JsonException<\/li>\n<li>Upgraded analysis : added new PHP 7.3 constants (curl, pgsql, mbstring, standard)<\/li>\n<li>Upgraded analysis : scalar or object property now ignore NULL as default<\/li>\n<li>Refactored analysis : UsedProtectedMethod<\/li>\n<li>Checked unit tests : 3059 \/ 3071 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Handles NaN and INF when the literals reach them<\/li>\n<li>Static constant may be variable if object is variable<\/li>\n<li>Removed superfluous linking for static calls.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.4.9<\/h2>\n<p class=\"date\">2018-10-15 &#8211; Lingji Bodhisattva<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Extended documentation with phpVersion, time to fix and severity<\/li>\n<li>Upgraded bufixes to PHP 7.2.11<\/li>\n<li>Added more tests on arguments in the DSL<\/li>\n<li>Removed double definitions for class constants<\/li>\n<li>Initial support for extension folder<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Collect the number of local variables, per method<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report accessing properties the wrong way<\/li>\n<li>New analysis : suggest named patterns<\/li>\n<li>New analysis : check Pack() arguments<\/li>\n<li>New analysis : Return in generators, for PHP 7.0 +<\/li>\n<li>New analysis : Repeated interfaces<\/li>\n<li>New analysis : Static properties shouldn&#8217;t use references until PHP 7.3<\/li>\n<li>New analysis : Don&#8217;t read and write in the same expression<\/li>\n<li>Upgraded analysis : is interface methods, extended to magic methods<\/li>\n<li>Upgraded analysis : empty regex<\/li>\n<li>Upgraded analysis : never used properties<\/li>\n<li>Upgraded analysis : logical operators in letters<\/li>\n<li>Upgraded analysis : could use interface, extended with PHP native interfaces<\/li>\n<li>Upgraded analysis : Is Zero, better handling of mixed expressions<\/li>\n<li>Refactored analysis : Empty functions<\/li>\n<li>Refactored analysis : Used Private Methods<\/li>\n<li>Checked unit tests : 3036 \/ 3055 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added DEFINITION between new and __construct<\/li>\n<li>Added support for className::class()<\/li>\n<li>Added better support for dynamic method calls<\/li>\n<li>Added better support for dynamic property calls<\/li>\n<li>Removed some usage of TokenIs<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.4.8<\/h2>\n<p class=\"date\">2018-10-08 &#8211; Ksitigarbha<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Adding more validation at DSL step level : stricter check on args, speed gain<\/li>\n<li>Cleaning more analysis from MAX_LOOPING variable<\/li>\n<li>Better protection for file names<\/li>\n<li>Removed static properties from DSL<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Don&#8217;t use __clone before PHP 7.0<\/li>\n<li>New analysis : Watch out for filter_input as a data source<\/li>\n<li>Upgraded analysis : Method Used Below refactored for speed<\/li>\n<li>Upgraded analysis : Undefined class constants now takes into account interfaces<\/li>\n<li>Removed anaysis : Relaxed Heredoc was double with Flexible Heredoc<\/li>\n<li>Checked unit tests : 3016 \/ 3033 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Build links between methodcall and method in a class<\/li>\n<li>Added links between method and its overwritten version in child<\/li>\n<li>Fixed fallback for functions<\/li>\n<li>Fixed linked between traits and their definition<\/li>\n<li>Removed variable definition for Parametername<\/li>\n<li>Simplified double usage between return and pushExpression()<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.4.7<\/h2>\n<p class=\"date\">2018-10-01 &#8211; Maitreya<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added &#8216;Suggestions&#8217; section to documentation, for many rules<\/li>\n<li>WIP : removing usage of MAX_LOOPING in analysis<\/li>\n<li>Added a lot of new external services<\/li>\n<li>Added documentation for creating a new analysis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded analysis : No interface was dropped in PHP 7.2<\/li>\n<li>Upgraded analysis : IsAMagicProperty extended to parents<\/li>\n<li>Removed anaysis : Relaxed Heredoc was double with Flexible Heredoc<\/li>\n<li>Checked unit tests : 3017 \/ 3029 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Linking variable in closure&#8217;s use to its local variable<\/li>\n<li>Removed some unused atoms from GraphElements<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.4.6<\/h2>\n<p class=\"date\">2018-09-24 &#8211; Dipankara<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Various code refactorisations<\/li>\n<li>Migration to PHPUnit 7.3.5<\/li>\n<li>Fixed filenames case<\/li>\n<li>Better handling of VCS<\/li>\n<li>More validations for project names<\/li>\n<li>More docs<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador\/Weekly : fixed &#8216; in analyser titles<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded analysis : Fopen mode accepts &#8216;r+b&#8217;<\/li>\n<li>Upgraded analysis : Unused Traits<\/li>\n<li>Upgraded analysis : Undefined Variables<\/li>\n<li>Checked unit tests : 3020 \/ 3033 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>New analysis : report literal used with reference<\/li>\n<li>Added support for boolval to Keyvalue<\/li>\n<li>Fixed support for boolval to Arraylist<\/li>\n<li>Added DEFINITION to static methods<\/li>\n<li>Added Variabledefinition for local variables<\/li>\n<li>Fixed bug in Not<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.4.5<\/h2>\n<p class=\"date\">2018-09-17 &#8211; Guanyin Bodhisattva<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Removed times() for until() in Dumps<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Manual : added folders tree<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Add Default To Parameter<\/li>\n<li>Upgraded analysis : Avoid reporting PHP function as classes<\/li>\n<li>Upgraded analysis : More empty Functions than just foo() {}<\/li>\n<li>Upgraded analysis : Wrong Number of argument now takes into account variadic<\/li>\n<li>Upgraded analysis : Should Use Constant now encompasses () and ?: structures<\/li>\n<li>Upgraded analysis : This Is Not An Array now takes ArrayObject\/SimpleXmlElement into account<\/li>\n<li>Checked unit tests : 3009 \/ 3020 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed &#8216;constant&#8217; status with Arrayliteral<\/li>\n<li>Fixed bug where strings are build close to the end of the script<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.4.4<\/h2>\n<p class=\"date\">2018-09-10 &#8211; White Dragon Horse<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Doctor reports the set of tokens used<\/li>\n<li>Lots of docs checks<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador \/ Phpconfiguration : report disable_functions and disable_classes<\/li>\n<li>Finished Weekly report<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report ext\/seaslog<\/li>\n<li>Upgraded analysis : Incompatible signatures<\/li>\n<li>Fixed DSL : analysisIs<\/li>\n<li>Checked unit tests : 3000 \/ 3010 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Closure are now processed with runplugin<\/li>\n<li>Removed depencencies to usedClasses<\/li>\n<li>Fixed detections of Closure at the end of a script<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.4.3<\/h2>\n<p class=\"date\">2018-09-03 &#8211; Sha Wujing<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>No error if missing svn<\/li>\n<li>Extended &#8216;First&#8217; thema<\/li>\n<li>Now reporting PHP native CIT, constants and functions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : php.ini suggestions includes disable_functions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report typecasting for json_decode<\/li>\n<li>New analysis : report classes that could be final<\/li>\n<li>New analysis : simplify closure into callback<\/li>\n<li>New analysis : report inconsistent elseif conditions<\/li>\n<li>Upgraded analysis : Reduced false positive on Type\/Default mismatch<\/li>\n<li>Upgraded analysis : Drop Else After Return uses elsif<\/li>\n<li>Upgraded analysis : Unused Private Property (rare)<\/li>\n<li>Checked unit tests : 2990 \/ 3004 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Removed extra Void after function definitions<\/li>\n<li>Fixed fullnspath with define()<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.4.2<\/h2>\n<p class=\"date\">2018-08-27 &#8211; Zhu Bajie<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed leftover bugs in the new DSL language<\/li>\n<li>Adopter Query in LoadFinal (first test)<\/li>\n<li>Extended support for clone type 1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New Report : Weekly report<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report forgotten conflict in traits<\/li>\n<li>New analysis : undefined insteadof<\/li>\n<li>New analysis : undefined variable<\/li>\n<li>New analysis : report classes that must call parent::__construct<\/li>\n<li>Upgraded analysis : Inexistant Compact variable<\/li>\n<li>Upgraded analysis : Test class was refactored<\/li>\n<li>Checked unit tests : 2975 \/ 2989 test pass (99% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>New atom : Staticmethod, for Insteadof (replacing &#8216;Staticconstant&#8217;)<\/li>\n<li>Added DEFINITION link for array(&#8216;class&#8217;, &#8216;method&#8217;) structure<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.4.1<\/h2>\n<p class=\"date\">2018-08-20 &#8211; Tang Sanzang<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Spined off Query for Gremlin, with Exakat DSL.<\/li>\n<li>Centralized &#8216;methods&#8217; property in Analysis class<\/li>\n<li>Extended MAX_LOOPING usage<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Added new thema : Class Review<\/li>\n<li>Upgraded analysis : Defined Parent MP (less queries)<\/li>\n<li>Upgraded analysis : Less false positives<\/li>\n<li>Added support for PHP 7.2.9<\/li>\n<li>Checked unit tests : 2965 \/ 2980 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed Edge case with Ternary and Boolean<\/li>\n<li>Added Staticpropertyname to distinguish from variables<\/li>\n<li>Added support for remote definitions to methods<\/li>\n<li>Removed global path for CIT (no fallback)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.4.0<\/h2>\n<p class=\"date\">2018-08-13 &#8211; Sun Wu Kong<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Chunked result inserts for Dump<\/li>\n<li>More support for PHP 7.4<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : added new Appinfo for relaxed Heredoc, trailing comma&#8230;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : class can be abstract<\/li>\n<li>New analysis : trailing comma<\/li>\n<li>New analysis : relaxed heredoc<\/li>\n<li>New analysis : removed functions in PHP 7.3<\/li>\n<li>New analysis : continue versus break<\/li>\n<li>Upgraded analysis : Hardcoded passwords is extended to objects<\/li>\n<li>Checked unit tests : 2964 \/ 2979 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Measure definitions stats for classes.<\/li>\n<li>Added support for relaxed heredoc<\/li>\n<li>Added support for closure as a return value<\/li>\n<li>Refactored support for Ternary and Labels<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.3.9<\/h2>\n<p class=\"date\">2018-08-06 &#8211; Du Ruhui<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for PHP 7.4<\/li>\n<li>&#8216;Copy&#8217; won&#8217;t update anymore<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : fixed repeated &#8216;compatibility&#8217; menu entry<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : avoid __CLASS__ and get_called_class().<\/li>\n<li>New analysis : prepare for (real) deprecation<\/li>\n<li>New analysis : const \/ define preference<\/li>\n<li>New analysis : define case sensitivity preference<\/li>\n<li>New analysis : avoid defining assert() in namespaces<\/li>\n<li>Removed analysis : Variables\/Arguments<\/li>\n<li>Checked unit tests : 2957 \/ 2971 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Removed Noscream &#8211; AT atom<\/li>\n<li>Added definition for class constants<\/li>\n<li>Fixed bug : can&#8217;t apply ~ to false<\/li>\n<li>Extended DEFINITION support to closure&#8217;s use and references<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.3.8<\/h2>\n<p class=\"date\">2018-07-30 &#8211; Fang Xuanling<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>&#8216;Copy&#8217; won&#8217;t update code anymore.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded analysis : &#8216;should use operator&#8217; only applies to constant chr() call<\/li>\n<li>Upgraded analysis : Useless Instructions is faster<\/li>\n<li>Checked unit tests : 2948 \/ 2962 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for variable definitions in methods<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.3.7<\/h2>\n<p class=\"date\">2018-07-16 &#8211; unnamed demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed handling of multiple updates<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>More documentations<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report usage of callback to process array<\/li>\n<li>New analysis : report usage of case insensitive constants<\/li>\n<li>Upgraded analysis : Hardcoded passwords is extended to objects<\/li>\n<li>Upgraded analysis : Go To Key Directly handles comparisons<\/li>\n<li>Added support for PHP 7.0.20<\/li>\n<li>Checked unit tests : 2948 \/ 2962 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.3.6<\/h2>\n<p class=\"date\">2018-07-16 &#8211; Zhang Gongjin<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for Rar archives<\/li>\n<li>Removed call to gremlin server at &#8216;status&#8217; time<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : support for msgpack extension<\/li>\n<li>New analysis : support for lzf extension<\/li>\n<li>Upgraded analysis : added missing function names in several extensions<\/li>\n<li>Checked unit tests : 2941 \/ 2955 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.3.5<\/h2>\n<p class=\"date\">2018-07-09 &#8211; Gao Shilian<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Removed 4 unused exceptions<\/li>\n<li>Extracted Query from Analysis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Reports : centralized all doc reading<\/li>\n<li>Reports : doc reading now parses sections (avoid overlap)<\/li>\n<li>Ambassador : Added exakat version and build to dashboard.<\/li>\n<li>Ambassador : Added Class Tree (All class hierarchies)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Fixed bug with &#8216;last&#8217; and &#8216;2last&#8217;<\/li>\n<li>New analysis : Report undefined::class<\/li>\n<li>New analysis : Report returned assignations as useless<\/li>\n<li>New analysis : Split scalar typehint by versions<\/li>\n<li>Upgraded analysis : Extended Reuse Variable to instantiations<\/li>\n<li>Upgraded analysis : Masking parenthesis are only for referenced arguments<\/li>\n<li>Upgraded analysis : Wrong case doesn&#8217;t apply to parent\/static\/self<\/li>\n<li>Upgraded analysis : Locally Unused Properties are extended to traits<\/li>\n<li>Upgraded analysis : Should Preprocess is extended to concatenations<\/li>\n<li>Upgraded analysis : Array_key_fill exclude variables by default<\/li>\n<li>Upgraded analysis : Ambiguous static reports the whole property definition<\/li>\n<li>Checked unit tests : 2919 \/ 2944 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added missing constants<\/li>\n<li>Fixed support for goto true;<\/li>\n<li>Fixed edge case for nested ternaries and boolean<\/li>\n<li>Moved Goto and Label to Name Atom<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.3.4<\/h2>\n<p class=\"date\">2018-07-02 &#8211; Cheng Yaojin<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added check when unarchiving tar.gz and tar.bz<\/li>\n<li>Added check for neo4j installation, (error grabing)<\/li>\n<li>Moved Upgrade to tmp folder<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Parameters are actually defined in the class<\/li>\n<li>New analysis : ambiguous visibilities of properties<\/li>\n<li>New analysis : report usage of PHP 7.1+ hash algorithm<\/li>\n<li>New analysis : csprng (random_bytes and random_int)<\/li>\n<li>New analysis : ext\/libeio<\/li>\n<li>New analysis : report incompatible signatures for methods<\/li>\n<li>Upgraded analysis : Unused Private Methods handles fluent interfaces<\/li>\n<li>Upgraded analysis : Defined Parent keyword<\/li>\n<li>Upgraded analysis : Recursion<\/li>\n<li>Refactored codeIs\/codeIsNot<\/li>\n<li>Checked unit tests : 2908 \/ 2923 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for &#8216;parent&#8217; definitions<\/li>\n<li>Fixed element counts in concatenation<\/li>\n<li>Fixed operator priority in Strval<\/li>\n<li>Upgraded handling of undefined constants to string<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.3.3<\/h2>\n<p class=\"date\">2018-06-25 &#8211; Ma Sanbao<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Better handling of fallback to global for functions<\/li>\n<li>Weekly code clean<\/li>\n<li>Refactored several analysis for speed<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : fixed regression in the dashboard<\/li>\n<li>Fixed edge case with properties<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : closure that can be static<\/li>\n<li>Upgraded analysis : empty function doesn&#8217;t count static or global<\/li>\n<li>Upgraded analysis : reported globals include $GLOBALS also<\/li>\n<li>Checked unit tests : 2881 \/ 2911 test pass (98% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Moved collection of functioncall to LoadFinal<\/li>\n<li>Added collection of interfaces and newcall<\/li>\n<li>Moved Declare to its own token<\/li>\n<li>Moved Property definitions to its own token<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.3.2<\/h2>\n<p class=\"date\">coming up &#8211; Duan Zhixian<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Reading stats from store, not graph.<\/li>\n<li>Git now fails silently if login is requested at clone \/ pull<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New analysis : == or === favorites<\/li>\n<li>New analysis : &gt; or &lt; favorites<\/li>\n<li>Upgraded analysis : written only variables is now faster<\/li>\n<li>Upgraded analysis : PHP reserved words has now 2 parameters<\/li>\n<li>Removed analysis : Type\/Integer, Real, Closures.<\/li>\n<li>Checked unit tests : 2901 \/ 2914 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Static, PPP, Final and Abstract are now properties<\/li>\n<li>Fixed regex in several rules<\/li>\n<li>Added support for code clone detection (WIP)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.3.1<\/h2>\n<p class=\"date\">2018-06-03 &#8211; Liu Hongji<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Cleaned code of unused classes and ;<\/li>\n<li>Fixed connexion script to the database<\/li>\n<li>Fixed check of php.log folder<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : display correct compilation state<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded analysis : used constant is also applied to defined()<\/li>\n<li>Upgraded analysis : used protected methods is case insensitive<\/li>\n<li>Upgraded analysis : Empty class omits extended classes<\/li>\n<li>Upgraded analysis : More sequences to SimplePreg<\/li>\n<li>Upgraded analysis : Throwable is not &#8216;unthrown&#8217; anymore<\/li>\n<li>Removed analysis : Static CPM<\/li>\n<li>Checked unit tests : 2901 \/ 2914 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Upgraded support for ::class<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.3.0<\/h2>\n<p class=\"date\">2018-06-03 &#8211; Xue Rengui<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for Tinkergraph 3.3.3<\/li>\n<li>Handles situations where exakat has no database<\/li>\n<li>Check for PHP version at bootstrap<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : Updated PHP recommendation report with PHP 7.3<\/li>\n<li>All : Variables don&#8217;t sport &#8230; nor &amp; anymore<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Single Use Variable<\/li>\n<li>New analysis : Should Use Operator<\/li>\n<li>New analysis : Check JSON production<\/li>\n<li>New analysis : Report visibility usage with constants<\/li>\n<li>Upgraded analysis : used constant is also applied to defined()<\/li>\n<li>Upgraded analysis : used protected methods is case insensitive<\/li>\n<li>Upgraded analysis : used directives handle function version<\/li>\n<li>Upgraded analysis : added lcg_value for better rand<\/li>\n<li>Upgraded analysis : Use Nullable extended to methods, closures.<\/li>\n<li>Upgraded analysis : Fixed support for &#8216;_&#8217; native function<\/li>\n<li>Checked unit tests : 2895 \/ 2907 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.2.9<\/h2>\n<p class=\"date\">2018-05-28 &#8211; Wang Gui<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Removed query cache from gremlin<\/li>\n<li>Added pre-query check to prevent queries that have no chance of result<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : first 50% of documentation fix : double quotes are not well displayed<\/li>\n<li>Ambassador : Results are ordered by files, then by lines<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Flexible Heredoc syntax<\/li>\n<li>New analysis : Non-compatible methods<\/li>\n<li>New analysis : Use the Blind Var<\/li>\n<li>New analysis : Inexistant Compact<\/li>\n<li>New analysis : Typehint \/ default value mismatch<\/li>\n<li>Upgraded analysis : strict_types are not recognized as undefined constant<\/li>\n<li>Upgraded analysis : More new methods for PHP 7.3<\/li>\n<li>Upgraded analysis : Dependant traits<\/li>\n<li>Upgraded analysis : Strpos comparison<\/li>\n<li>Upgraded analysis : Method Must Return<\/li>\n<li>Checked unit tests : 2885 \/ 2889 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Interface may have const, not traits (Loading)<\/li>\n<li>Added support for static call to methods<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.2.8<\/h2>\n<p class=\"date\">2018-05-21 &#8211; Xu Jingzong<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Implemented a cache for speed boost.<\/li>\n<li>Refactored files finding method<\/li>\n<li>Git VCS always submit a user when cloning (using exakat by default)<\/li>\n<li>Moved custom themes from themas.ini to themes.ini<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : fixed naming the audit<\/li>\n<li>Ambassador : added &#8216;Dead code&#8217; section<\/li>\n<li>Doctor : split themes display (default\/customs)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report what should be done in SQL<\/li>\n<li>New analysis : Typehinted reference<\/li>\n<li>New analysis : Strpos doing too much work<\/li>\n<li>New analysis : Can&#8217;t instantiate class<\/li>\n<li>Upgraded analysis : Don&#8217;t echo error<\/li>\n<li>Upgraded analysis : PPP Declaration style<\/li>\n<li>Upgraded analysis : Useless abstract class<\/li>\n<li>Upgraded analysis : Buried assignation doesn&#8217;t report declare anymore<\/li>\n<li>Upgraded analysis : Abstract methods are not reported as unused<\/li>\n<li>Upgraded analysis : relaxed version constraint for all Extensions\/*<\/li>\n<li>Checked unit tests : 2852 \/ 2856 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed handling of short_open_tags<\/li>\n<li>Fixed edge case with %<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.2.7<\/h2>\n<p class=\"date\">2018-05-14 &#8211; Li Yuanji<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Extended status command to all VCS<\/li>\n<li>Added support for customized themes<\/li>\n<li>Added Upgrading section, List of parametrized analysis, revamped summary<\/li>\n<li>Simplified handling of commandline options<\/li>\n<li>Removed usage of JSON for &#8216;doctor&#8217;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>A lot more documentation, examples, links.<\/li>\n<li>Optimized type downloader<\/li>\n<li>Added report themes pre-requisites<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : ext\/cmark<\/li>\n<li>Upgraded analysis : too many children is configurable<\/li>\n<li>Upgraded analysis : error_reporting 0 and -1 are not reported as issues.<\/li>\n<li>Checked unit tests : 2835 \/ 2839 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed bug where constant self referenced.<\/li>\n<li>Moved Identifiers to Names<\/li>\n<li>Added first definitions for members.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.2.6<\/h2>\n<p class=\"date\">2018-05-07 &#8211; Li Jiancheng<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Moved more classes to helpers<\/li>\n<li>Removed constants for Tokens<\/li>\n<li>Upgraded to Robo 1.2.3<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added support for custom themas for reports.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : zookeeper<\/li>\n<li>New analysis : Report missing parenthesis<\/li>\n<li>New analysis : Report invalid interval checks<\/li>\n<li>New analysis : Suggest array_unique when possible<\/li>\n<li>New analysis : Report when callback needs a return<\/li>\n<li>New analysis : Reduce the number of if<\/li>\n<li>Updated Exception list, up to PHP 7.3<\/li>\n<li>Upgraded analysis : Printf Arguments<\/li>\n<li>Upgraded analysis : Count On Null<\/li>\n<li>Upgraded analysis : Regex on Collector<\/li>\n<li>Upgraded analysis : File Inclusion wrong case handles parenthesis<\/li>\n<li>Upgraded analysis : Make globals a property<\/li>\n<li>Upgraded analysis : Invalid regex<\/li>\n<li>Checked unit tests : 2814 \/ 2818 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added definition links for staticmethodcalls.<\/li>\n<li>Added boolean and int values to __DIR__ and co.<\/li>\n<li>Removed several static properties<\/li>\n<li>Fixed precedence of instanceof<\/li>\n<li>Added support for Null val<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.2.5<\/h2>\n<p class=\"date\">2018-04-30 &#8211; Li Yuan<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added command &#8216;config&#8217; to configure project from commandline<\/li>\n<li>Made Exakat reentrant<\/li>\n<li>Moved Configuration creation to external file<\/li>\n<li>Upgraded status when audit isn&#8217;t run yet<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Regex on Collector<\/li>\n<li>Upgraded analysis : Only Variable with reference argument<\/li>\n<li>Upgraded analysis : File Inclusion Wrong Case<\/li>\n<li>Upgraded analysis : Invalid Regex<\/li>\n<li>Added support for PHP 7.2.5, 7.1.17 and 7.0.30<\/li>\n<li>Checked unit tests : 2802 \/ 2809 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed various bugs with constant scalar expression<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.2.4<\/h2>\n<p class=\"date\">2018-04-23 &#8211; Li Chunfeng<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Now fail with explicit message for memory running out<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : Updated &#8216;confusing variables&#8217; report<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded analysis : Could be short assignment<\/li>\n<li>Upgraded analysis : Could be static<\/li>\n<li>Upgraded analysis : Fail Substr Comparison (handles constants)<\/li>\n<li>Checked unit tests : 2796 \/ 2801 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added propagation of constants when value can be processed<\/li>\n<li>Introduced &#8216;Parameter&#8217; token, to differentiate with Variable<\/li>\n<li>Fixed syntax highlighting<\/li>\n<li>Fixed a bug with negative bitshift<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.2.3<\/h2>\n<p class=\"date\">2018-04-16 &#8211; Yuan Tiangang<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>New append for logs<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New report : Manual.<\/li>\n<li>Ambassador : Rewrote the export of &#8216;confusing variables&#8217;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report strtr bad usage<\/li>\n<li>New analysis : don&#8217;t unset properties<\/li>\n<li>Upgraded analysis : Invalid Regex<\/li>\n<li>Upgraded analysis : Property Could Be Local<\/li>\n<li>Upgraded analysis : No Hardcoded path<\/li>\n<li>Upgraded analysis : echo\/print preferences also report printf<\/li>\n<li>Removed analysis : Close Naming (now done at Report level)<\/li>\n<li>Checked unit tests : 2770 \/ 2786 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Removed double definition for functioncalls<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.2.2<\/h2>\n<p class=\"date\">2018-04-09 &#8211; Yin Kaishan<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Cleaned doctor so it works even without requirements<\/li>\n<li>Fixed special chars with git URL<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : new inventory with classes changes in heritage<\/li>\n<li>Ambassador : new inventory of large expressions<\/li>\n<li>Upgraded report : Defined Exceptions are cleaned of doubles<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report Redefined Private Properties<\/li>\n<li>New analysis : report substr() usage with strlen<\/li>\n<li>Upgraded analysis for Inclusion Wrong Case filenames<\/li>\n<li>Upgraded analysis : Cast To Boolean is extended to True\/False<\/li>\n<li>Upgraded analysis : Omit negative lengths<\/li>\n<li>Upgraded analysis : interface search also include parameter counts<\/li>\n<li>Upgraded analysis : Failed Substr Comparison handles special chars<\/li>\n<li>Upgraded analysis : Identical consecutive omits arrays<\/li>\n<li>Checked unit tests : 2757 \/ 2775 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.2.1<\/h2>\n<p class=\"date\">2018-04-02 &#8211; Fu Yi<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed generation of analysis logs<\/li>\n<li>Fixed doctor, which wouldn&#8217;t diagnostic the absence of needed extensions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>More real-life examples in docs<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New favorites : property declaration unique or multiples ?<\/li>\n<li>New analysis : $a = +$b;<\/li>\n<li>New analysis for Melis : Regex check and Route constraints<\/li>\n<li>Upgraded analysis : Constant used below<\/li>\n<li>Checked unit tests : 2760 \/ 2766 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed counts in property declarations<\/li>\n<li>Fixed final new lines in heredoc\/nowdoc<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.2.0<\/h2>\n<p class=\"date\">2018-03-26 &#8211; Xiao Yu<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Upgraded concurrency with analysis<\/li>\n<li>Replaced $_SERVER[&#8216;_&#8217;] by PHP_BINARY<\/li>\n<li>Removed old code (&gt; 1.0.0)<\/li>\n<li>Adopted &#8216;stable&#8217; version for progressbar<\/li>\n<li>Fixed loading with Bazaar<\/li>\n<li>Added support for Parametrized analysis<\/li>\n<li>Better initial configuration with doctor<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : upgraded analysis settings table<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report Private functions for WordPress<\/li>\n<li>New analysis : Suggest simplifying chr(123);<\/li>\n<li>New analysis : Too many native calls<\/li>\n<li>Updated analysis : fallthrough are not reported with die<\/li>\n<li>New Theme : Random<\/li>\n<li>Collecting more stats for classes.<\/li>\n<li>Checked unit tests : 2758 \/ 2741 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Upgraded support for Heredoc<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.1.9<\/h2>\n<p class=\"date\">2018-03-19 &#8211; Qin Qiong<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Better documentation for reports<\/li>\n<li>Adding Real Code examples to documentation<\/li>\n<li>Refactored Config reading<\/li>\n<li>Moved more VCS information to its own class<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Upgraded report : Ambassador reports the number of parameters in methods<\/li>\n<li>New report : favorites (spin-off from Ambassador)<\/li>\n<li>Upgraded report : Inventories also covers Dateformat, Regex, Sql, Url, Email, Unicode Blocks.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : too many parameters<\/li>\n<li>New analysis : report mass creation of arrays<\/li>\n<li>Checked unit tests : 2755 \/ 2738 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.1.8<\/h2>\n<p class=\"date\">2018-03-12 &#8211; Yuchi Gong<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Reduced cache when running analysis<\/li>\n<li>Fixed order of analysis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : fixed faceted search problems<\/li>\n<li>Codacy : added codacy-style report<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : support for IBM db2, leveldb<\/li>\n<li>New analysis : should use count&#8217;s second argument<\/li>\n<li>Upgraded analysis : Randomly sorted arrays<\/li>\n<li>Checked unit tests : 2749 \/ 2731 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed edge case where die is an argument<\/li>\n<li>Fixed edge case where Yield returns a array<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.1.7<\/h2>\n<p class=\"date\">2018-03-05 &#8211; Xu Maogong<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Removed most static in Analysis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New format : All, that produces all reports<\/li>\n<li>Ambassador : new report estimates fitting PHP version<\/li>\n<li>Ambassador : report enable_dl in configuration<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report dynamic library loading<\/li>\n<li>New analysis : suggest array_fill_keys()<\/li>\n<li>New analysis : PHP 7.3 optional last argument<\/li>\n<li>New analysis : added support for xxtea, opencensus, varnish, uopz<\/li>\n<li>Upgraded BugFixes report to PHP 7.2.3<\/li>\n<li>Updated analysis : ext\/cairo has new functions<\/li>\n<li>Updated analysis : PHP 7.3 new functions<\/li>\n<li>Removed analysis : NullCoalesce (double)<\/li>\n<li>Checked unit tests : 2743 \/ 2731 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Moved &#8216;constant&#8217; to plugins<\/li>\n<li>Fixed bug when updating with HG<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.1.6<\/h2>\n<p class=\"date\">2018-02-26 &#8211; Wei Zheng<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Created &#8216;First&#8217;, a recipe of initial analysis<\/li>\n<li>Prepared installation for compose<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Restored &#8216;INLINE&#8217; results<\/li>\n<li>New reports : Stats<\/li>\n<li>Collect PHP native function cool<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report suggest compact instead of array<\/li>\n<li>New analysis : list with references (PHP 7.3+)<\/li>\n<li>New analysis : report situation where check is done on non-cast value<\/li>\n<li>New analysis : foreach( $array as $o -&gt; $v) as error prone<\/li>\n<li>Handle cases where PHP regex are not compilable anyway<\/li>\n<li>Checked unit tests : 2732 \/ 2722 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Propagate constant concatenation values.<\/li>\n<li>Fixed calculation of intval<\/li>\n<li>Refactored Configuration readers<\/li>\n<li>Fixed bug when calculating __METHOD__<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.1.5<\/h2>\n<p class=\"date\">2018-02-19 &#8211; Li Shimin<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Refactored all reports<\/li>\n<li>Removed outdated Devoops report<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Upgraded BugFixes report to PHP 7.2.2<\/li>\n<li>Ambassador : generates a list of confusing variables<\/li>\n<li>New report : OWASP<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Use Math<\/li>\n<li>New analysis : Extensions ext\/hrtime<\/li>\n<li>New analysis : Possible Infinite Loops<\/li>\n<li>Upgraded analysis : addZero, Multiply by one supports new situations<\/li>\n<li>Upgraded analysis : added microtime, uniqid .. to better rand.<\/li>\n<li>Checked unit tests : 2719 \/ 2724 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed check on script compilation that was too strict.<\/li>\n<li>Fixed internal assert()<\/li>\n<li>Exported VCS to separate classes<\/li>\n<li>Refactored load with 3 separate plugins : intval, noDelimiter, booval<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.1.4<\/h2>\n<p class=\"date\">2018-02-12 &#8211; The Great White Turle<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Build concatenation values in scalar constante expression.<\/li>\n<li>Upgraded export of file dependencies values<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : fixed duration of audit.<\/li>\n<li>Composer : provides a full list of depend extensions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report useless catch<\/li>\n<li>New analysis : suggest using array_search \/ array_keys instead of foreach<\/li>\n<li>New analysis : double array_flip is slow<\/li>\n<li>New analysis : Suggest using cached values<\/li>\n<li>New analysis : Functions that fallback to global namespace<\/li>\n<li>Upgraded analysis : Encoded letters supports leading 0 in unicode codepoint<\/li>\n<li>Upgraded analysis : Variable strange names now report 3 identical consecutive letters<\/li>\n<li>Upgraded analysis : Upgraded support to __dir__<\/li>\n<li>Checked unit tests : 2716 \/ 2711 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed definitions link for functions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.1.3<\/h2>\n<p class=\"date\">2018-02-05 &#8211; The fairy Su&#8217;e<\/p>\n<ul>\n<li>Report\n<ul>\n<li>Fixed Ambassador : the favorites weren&#8217;t displayed.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report useless references<\/li>\n<li>New analysis : Melis configuration : Undefined configuration array<\/li>\n<li>New analysis : Melis configuration : make string.<\/li>\n<li>Upgraded analysis : Parent first<\/li>\n<li>Checked unit tests : 2700 \/ 2695 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Better handling of Labels.<\/li>\n<li>Fixed edge case where class and constants where mistaken one for the other<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.1.2<\/h2>\n<p class=\"date\">2018-01-29 &#8211; Jade Rabbit Spirit<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Upgraded docs to tinkergraph 3.2.7<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report missing included files<\/li>\n<li>New analysis : ZF3 : No Echo Outside a View.<\/li>\n<li>New analysis : Local Global variable : report variable that looks global but are not<\/li>\n<li>Upgraded analysis : Directive names are check with case sensitive analysis<\/li>\n<li>Checked unit tests : 2687 \/ 2693 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Magic Constant hold their actual value<\/li>\n<li>Fixed Fullnspath for constants (case sensitive)<\/li>\n<li>Fixed edge case with exit and die<\/li>\n<li>Fixed edge case with exit and die and -1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.1.1<\/h2>\n<p class=\"date\">2018-01-22 &#8211; Wood Xie of Dipper<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed path when calling exakat from outside its install folder<\/li>\n<li>First analysis for Melis Framework<\/li>\n<li>Optimized dictionary collection<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : upgraded graph for class sizes<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report case problems with includes<\/li>\n<li>New analysis : Melis framework<\/li>\n<li>New analysis : inventory of view properties for Zend Framework<\/li>\n<li>New analysis : report view files for Zend Framework<\/li>\n<li>Upgraded analysis : + is accepted as regex delimiter<\/li>\n<li>Upgraded analysis : same condition searches inside blocks<\/li>\n<li>Checked unit tests : 2665 \/ 2671 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Magic constants __DIR__ and __FILE__ get their actual value in noDelimiter<\/li>\n<li>Created Eval atom<\/li>\n<li>Removed &#8216;Name&#8217; token for echo, print, die, exit.<\/li>\n<li>Upgraded handling of constant names inside strings<\/li>\n<li>Removed a bug when storing dictionary.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.1.0<\/h2>\n<p class=\"date\">2018-01-15 &#8211; Wood Dragon of Horn<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Replaced &#8216;code&#8217; property with a dictionary<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Introduced &#8216;Magicmethod&#8217; for Magic methods in class<\/li>\n<li>Fixed a bug when &#8216; is in file path<\/li>\n<li>Fixed a bug when several raw HTML are in a PHP script.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.0.11<\/h2>\n<p class=\"date\">2018-01-08 &#8211; Wood Dragon of Well<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added assertion for property name.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : Added report of classes&#8217;s size.<\/li>\n<li>Fixed missing audit end&#8217;s time.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Sqlite3 doesn&#8217;t escape &#8220;<\/li>\n<li>Upgraded analysis : Strange names also report qqqq sequences in variable names<\/li>\n<li>Checked unit tests : 2617 \/ 2657 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed fullnspath handling for constants (case insensitive for the constant name)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.0.10<\/h2>\n<p class=\"date\">2018-01-01 &#8211; Wood Wolf of Legs<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed Sqlite3 escaping error : use &#8216;, not &#8220;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded analysis : ? is possible as delimiter<\/li>\n<li>Analysis works better with nested structures<\/li>\n<li>Checked unit tests : 2601 \/ 2649 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>First plugin for Load Task.<\/li>\n<li>Upgraded support for define-d constant.<\/li>\n<li>Introduced Phpvariable<\/li>\n<li>Fixed scoping with array index.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.0.9<\/h2>\n<p class=\"date\">2017-12-25 &#8211; King of Dust Protection<\/p>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : list complex expressions.<\/li>\n<li>Dump : added function inventory<\/li>\n<li>Dump : added begin and end line for structures.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report reference error with Ternary operator<\/li>\n<li>New analysis : report Undefined classes in WordPress.<\/li>\n<li>Upgraded analysis : preg option E, tighter regex.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Better handling of long path name. TBC.<\/li>\n<li>Introduced Parent, Static, Self, Exit, Echo, Print.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.0.8<\/h2>\n<p class=\"date\">2017-12-18 &#8211; King of Heat Protection<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Doctor reports memory_limit and JAVA_OPTIONS\/JAVA_HOME<\/li>\n<li>Made database restart more portable<\/li>\n<li>Added spell checking on docs<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : Regex inventory added<\/li>\n<li>Ambassador : Largest expressions reported<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report identical operands on both sides of operator<\/li>\n<li>New analysis : report potentially mistaken concatenation in array<\/li>\n<li>New analysis : report mistaken scalar typehint<\/li>\n<li>New analysis : report undefined classes by symfony version<\/li>\n<li>New analysis : report undefined classes by wordpress version<\/li>\n<li>Upgraded analysis : Interfaces are also reported from return typehint<\/li>\n<li>Upgraded analysis : Mistaken concatenation got rid of various false-positives<\/li>\n<li>Checked unit tests : 2601 \/ 2633 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Isset, Empty, Phpvariables now have their own atom.<\/li>\n<li>Fixed edge case with $ token<\/li>\n<li>Fixed Constant fqn building<\/li>\n<li>UTF-8 protection for propertyname<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.0.7<\/h2>\n<p class=\"date\">2017-12-11 &#8211; King of Heat Protection<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added \/var to default omitted folders<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : should use array_filter.<\/li>\n<li>New analysis : ext\/igbinary<\/li>\n<li>Checked unit tests : 2533 \/ 2599 test pass (97% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.0.6<\/h2>\n<p class=\"date\">2017-12-04 &#8211; Fuli<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Refactored description<\/li>\n<li>Moved PHPsyntax to a function<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Never used parameter.<\/li>\n<li>New analysis : always use named boolean parameters<\/li>\n<li>Upgraded analysis : unused arguments<\/li>\n<li>Checked unit tests : 2573 \/ 2585 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added new token : This for $this<\/li>\n<li>Updated loader to handle PHP 7.3 functioncall syntax (final ,)<\/li>\n<li>Turned Markcallable into an independant analysis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.0.5<\/h2>\n<p class=\"date\">2017-11-27 &#8211; King of Cold Protection<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Configured Exakat for Tinkergraph 3.3. Still unfinished.<\/li>\n<li>Documentation now has an external link to extensions.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : added more inventories : URL SQL, email, GET index, MD5, Mime<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : parent first<\/li>\n<li>New analysis : Report uncommon Environment Vars<\/li>\n<li>New analysis : Report invalid Regex<\/li>\n<li>New analysis : Report contatenation in Zend DB<\/li>\n<li>Fixed analysis : Deprecated Functions<\/li>\n<li>Fixed analysis : Unknown PCRE2 option<\/li>\n<li>Upgraded analysis : hardcoded password<\/li>\n<li>Upgraded analysis : array_merge in loops<\/li>\n<li>Upgraded analysis : substr() first. Handle following expressions<\/li>\n<li>Refactored analysis : Used Functions<\/li>\n<li>Refactored analysis : Add Zero<\/li>\n<li>Checked unit tests : 2573 \/ 2585 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed a bug that linked functions and definitions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.0.4<\/h2>\n<p class=\"date\">2017-11-20 &#8211; Boxiang Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>PhpExec, get only path to binary.<\/li>\n<li>Cleaned docs of double links<\/li>\n<li>Cleaned code<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added libsodium, Argon2 to Crypto; DL() usage to PHP.<\/li>\n<li>Compatibility report only focuses on backward incompatibilities.<\/li>\n<li>New recipes will cover &#8216;suggestions for better code&#8217;. Coming up.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : &#8221; string is better than &#8216; (sorry&#8230;)<\/li>\n<li>New analysis : PHP 7.3&#8217;s PCRE 2<\/li>\n<li>New analysis : report missing &#8216;new&#8217; in front of class name.<\/li>\n<li>New analysis : use is_object instead of is_resource for ext\/hash<\/li>\n<li>New analysis : report non-countable calls<\/li>\n<li>New analysis : report DL usage in Appinfo<\/li>\n<li>New analysis : slice first, then map arrays.<\/li>\n<li>New analysis : Avoid 5th argument in PHP 7.2 for set_error_handler<\/li>\n<li>New analysis : avoid null with get_class()<\/li>\n<li>New analysis : suggest using list() with foreach instead of arrays<\/li>\n<li>New analysis : avoid using $this as argument in constructor<\/li>\n<li>New analysis : Report usage of ext\/vips<\/li>\n<li>New inventory : GPC variables<\/li>\n<li>Updated analysis : Use Class Operator doesn&#8217;t report methods names anymore<\/li>\n<li>Updated analysis : Long argument size is raised to 60 chars<\/li>\n<li>Updated analysis : ignore when missing break is in last case<\/li>\n<li>Updated analysis : Use This ignores &#8216;self&#8217;.<\/li>\n<li>Updated analysis : Randomly sorted Arrays ignores arrays of 3 or less.<\/li>\n<li>Updated analysis : ext\/mcrypt gets its constants<\/li>\n<li>Updated analysis : more strange names being used in code<\/li>\n<li>Updated analysis : more PHP 7.2 removed functions<\/li>\n<li>Checked unit tests : 2563 \/ 2572 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Reduced duplicated that may lead to loading error.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.0.3<\/h2>\n<p class=\"date\">2017-11-13 &#8211; Baize Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed driver Tinkergraph, which was not setting the right ids.<\/li>\n<li>Doctor now reports $JAVA_OPTIONS, in case one need to allocate more memory<\/li>\n<li>Doctor now reports token limit<\/li>\n<li>Moved config.ini creation to first phase of init.<\/li>\n<li>Fixed collect of error when init with git.<\/li>\n<li>Upgraded driver gremlin-php to 3.0.2<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : Now reports the namespaces as a tree.<\/li>\n<li>New analysis : report members that are static and not.<\/li>\n<li>Updated analyzis : normal method called statically.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Added support for Drupal, FuelPHP and Phalcon.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.0.2<\/h2>\n<p class=\"date\">2017-11-06 &#8211; Suanni Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Better report of error messages from VCS.<\/li>\n<li>Updated support for Vagrant<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : Fixed display for &#8216;Callback&#8217;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : substr() first, then replace.<\/li>\n<li>New analysis : report double prepare (WP).<\/li>\n<li>New analysis : avoir the +1 month trap<\/li>\n<li>New analysis : check for printf() options<\/li>\n<li>New analysis : check for placeholder in prepare (WP)<\/li>\n<li>New analysis : avoid direct injection into prepare (WP)<\/li>\n<li>New analysis : performance recommendation for switch.<\/li>\n<li>New analysis : merge if\/if into if\/then\/else<\/li>\n<li>Checked unit tests : 2500 \/ 2536 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.0.1<\/h2>\n<p class=\"date\">2017-10-30 &#8211; Xueshi Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Created Result class for Graphdb results<\/li>\n<li>Docker image is updated with version 1.0.1<\/li>\n<li>Vagrant files are updated with version 1.0.1<\/li>\n<li>Preparing support for Gremlin 3.3.0<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added support for PHP 7.1.11 and 7.0.25<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : could be else (for consecutive opposite if\/then)<\/li>\n<li>Checked unit tests : 2517 \/ 2527 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 1.0.0<\/h2>\n<p class=\"date\">2017-10-23 &#8211; Roushi Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Tested on Gremlin 3.2.6. Checked Gremlin 3.3.0, but it needs more work.<\/li>\n<li>Upgraded doctor for installation and report.<\/li>\n<li>Upgraded docs to set gremlin-server as default install.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added support for Clang-style report.<\/li>\n<li>Ambassador : fixed link to exception Tree.<\/li>\n<li>Inventories : Date format,<\/li>\n<li>Audit names are reported in every Ambassador-style report.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded PHP directive list.<\/li>\n<li>Functions In For loop : prevent issue if the function uses a loop variable.<\/li>\n<li>Useless instruction : do not report return $i++ if $i is reference<\/li>\n<li>Useless instruction : Avoir reporting properties when they are magic<\/li>\n<li>New analysis : mark properties to be magic.<\/li>\n<li>Upgraded list of PHP logins, to report hard coded passwords.<\/li>\n<li>Upgraded close naming : variables that differ with 1 chars are reported.<\/li>\n<li>Added assert(false&#8230;) to list of branching syntax.<\/li>\n<li>Checked unit tests : 2515 \/ 2525 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.16<\/h2>\n<p class=\"date\">2017-10-16 &#8211; Tawny Lion Demon<\/p>\n<ul>\n<li>Report\n<ul>\n<li>Beta version for Drill Instructor<\/li>\n<li>Upgraded Inventories report with Sessions, Cookies, Incoming variables<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Expression too complex.<\/li>\n<li>New analysis : Session Handler must implements SessionUpdateTimestampHandlerInterface<\/li>\n<li>New analysis : is Zero : additions that negate some terms<\/li>\n<li>New analysis : unconditional loops<\/li>\n<li>Upgraded Zend Framework review with latest versions (feed, http, eventmanager&#8230;)<\/li>\n<li>Upgraded &#8216;Strange names&#8217; with new typos<\/li>\n<li>Upgraded &#8216;Logical to in_array&#8217; to handle separated comparisons<\/li>\n<li>Checked unit tests : 2505 \/ 2515 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed bug with Sign in Additions.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.15<\/h2>\n<p class=\"date\">2017-10-09 &#8211; Nine Headed Lion<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Server : now supports stop, start and restart.<\/li>\n<li>Every audit gets a random name, for easy differentiation<\/li>\n<li>Added support for PHP 7.3<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : list of analysis that report nothing : Good job!<\/li>\n<li>Slim report : fixed build<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : file upload names vulnerability check<\/li>\n<li>New analysis : variable that may hold different types of date<\/li>\n<li>New analysis : always anchor regex<\/li>\n<li>Checked unit tests : 2475 \/ 2480 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.14<\/h2>\n<p class=\"date\">2017-10-02 &#8211; Grand Saint of Nine Spirits<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Support UTF-8 on Gremlin Server (other encoding are not)<\/li>\n<li>Better display of vcs updates<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : added Security and Performances<\/li>\n<li>Ambassador : Upgraded exception presentation<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report fallthrough in switch<\/li>\n<li>New analysis : inventory regex<\/li>\n<li>Added support for PHP 7.1.10 and 7.0.24<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.13<\/h2>\n<p class=\"date\">2017-09-25 &#8211; King of the Southern Hill<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Code cleaning<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : changed display of the audit<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Refactored several analysis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.12<\/h2>\n<p class=\"date\">2017-09-18 &#8211; Ruler of the Kingdom of Miefa<\/p>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : fixed collect of interfaces and trait names<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : ext\/Parle<\/li>\n<li>New analysis : help optimize pathinfo() usage<\/li>\n<li>New analysis : catch array_values() usage with list and pathinfo()<\/li>\n<li>Updated analysis : Don&#8217;t show error messages with catch-&gt;getMessage();<\/li>\n<li>Updated analysis : No concat in loop handles $x = $c . $x;<\/li>\n<li>Checked unit tests : 2456 \/ 2461 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for &#8216;, &#8221; and &gt; in file names. Still missing support for \\<\/li>\n<li>Restaured fallback to global constants.<\/li>\n<li>Fixed special case : <!--?php ++$x ?--><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.11<\/h2>\n<p class=\"date\">2017-09-11 &#8211; Half-Guanyin<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support options for branches and tags<\/li>\n<li>Added support for config in server mode<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Fixed methods dump for interfaces.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Added all analysis to report could be private\/protected for<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed handling of &#8216;&lt;&#8216; char in paths<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.10<\/h2>\n<p class=\"date\">2017-09-04 &#8211; Golden Nosed Albino Rat Spirit<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Upgraded server version with config alteration features.<\/li>\n<li>New generated config-cache<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Fixed property names in Visibility report<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Arrays\/IsModified : arrays are not modified unless in a (unset)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed &#8216;constant&#8217; for functioncalls<\/li>\n<li>Introduced &#8216;Name&#8217; for Identifier without a fullnspath<\/li>\n<li>Added support for branches and tags in init<\/li>\n<li>Fixed edge case with $o-&gt;$$b<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.9<\/h2>\n<p class=\"date\">2017-08-28 &#8211; Lady Earth Flow<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Creates config.cache, with cached calculated configs. Remove to update.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>GraphQL : Upgraded GraphQL report, with relationships.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : suggest moving for() to foreach()<\/li>\n<li>New analysis : shell_exec\/exec\/`backtick` favorite<\/li>\n<li>Update analysis : Abstract Static is for PHP 7.0-<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Removed Arguments and ARGUMENTS.<\/li>\n<li>Finished &#8216;factory&#8217; from Config.<\/li>\n<li>Better handling of long path names.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.8<\/h2>\n<p class=\"date\">2017-08-21 &#8211; ruler of the Kingdom of Biqiu<\/p>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : use foreach, not for()<\/li>\n<li>New analysis : ext\/fam, ext\/rdkafka<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed edge case where pathnames are too long on OSX.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.7<\/h2>\n<p class=\"date\">2017-08-14 &#8211; Old Man of the South Pole<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed project_vcs when none is used.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Better documentation for in_array replacements and array_unique()<\/li>\n<li>Added support for PHP 7.1.8 and 7.0.22<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.6<\/h2>\n<p class=\"date\">2017-08-07 &#8211; White Faced Vixen Spirit<\/p>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : no negative for strings before 7.1<\/li>\n<li>New analysis : use in_array instead of ||<\/li>\n<li>Updated analysis : preg_quote has no delimiter<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed bug in handling real value for negative numbers<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.5<\/h2>\n<p class=\"date\">2017-07-31 &#8211; White Deer Spirit<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Removed config singleton<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New report : simpletables (HTML)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report optional parameters<\/li>\n<li>New analysis : report concat inside a loop<\/li>\n<li>Updated analysis : Could Be Class Constant, when no visibility is provided.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.4<\/h2>\n<p class=\"date\">2017-07-24 &#8211; peacock Mahamayuri<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Optimized performances for large projects (over 2M tokens)<\/li>\n<li>Support Neo4j as a driver for Tinkgerpop<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Now covering all PHP 7.2 features<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Extension xattr<\/li>\n<li>New analysis : report &#8216;object&#8217; as a class name<\/li>\n<li>New analysis : No Array for magic property<\/li>\n<li>New analysis : suggest reducing code for isset<\/li>\n<li>New favorite : and \/ &amp;&amp;<\/li>\n<li>Updated analysis : fetch correct delimiter, even if escaped.<\/li>\n<li>Extended coverage for several analysis<\/li>\n<li>Removed several nested-subqueries (bad for performances)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Tinkergraph\/Neo4j : reworked loading data from disk.<\/li>\n<li>Added protection for $ in filename<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.3<\/h2>\n<p class=\"date\">2017-07-17 &#8211; Golden Winged Great Peng<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Prepared options for several back servers : Tinkergraph, Gremlin-Server\/Neo4j, Janusgraph<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New report : Marmelab (GraphQL server)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report when a property is used as object or scalar<\/li>\n<li>New analysis : Mismatched Typehint<\/li>\n<li>New analysis : Mismatched Default values<\/li>\n<li>Upgraded analysis :<\/li>\n<li>Fixed a gremlin bug in noAtomInside<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for trailing comma in group use (PHP 7.2)<\/li>\n<li>Fixed building of constants&#8217; values<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.2<\/h2>\n<p class=\"date\">2017-07-10 &#8211; Samantabhadra<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for Tinkergraph as graph backend<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : reports callback\/closures, all 3 declares (ticks, encoding, strict_types)<\/li>\n<li>Ambassador : reports strict_types as favorite<\/li>\n<li>PlantUML : upgraded report<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Mismatched ternary branches<\/li>\n<li>New analysis : mkdir, by default, uses 777.<\/li>\n<li>New analysis : ext\/lapack<\/li>\n<li>Upgraded analysis : option E for preg_match, refined results<\/li>\n<li>Checked unit tests : 2337 \/ 2366 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for Instanceof and GROUPUSE with Nsname<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.1<\/h2>\n<p class=\"date\">2017-07-03 &#8211; Yellow Toothed Elephant<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Refactored structures extractions in dump<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New report : PlantUML<\/li>\n<li>Ambassador : Appinfo now reports how popular is a feature<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Const \/ Define() favorite for constants<\/li>\n<li>New analysis : do not return in finally<\/li>\n<li>Upgraded analysis : Add Zero was refactored<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Prepared list of tokens and relations<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.12.0<\/h2>\n<p class=\"date\">2017-06-26 &#8211; Manjusri<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for Janusgraph (Gremlin 3)<\/li>\n<li>Refactored dump&#8217;s data collection for speed.bb<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added support for WordPress and Joomla as Frameworks<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Avoid Optional properties<\/li>\n<li>New analysis : Multiple declarations of functions<\/li>\n<li>New analysis : Non breakable spaces in names<\/li>\n<li>New analysis : Favorite Heredoc delimiter<\/li>\n<li>New analysis : ext\/swoole<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Modified several nodes\/links names, for compatibility purposes<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.11.8<\/h2>\n<p class=\"date\">2017-06-19 &#8211; Xiaozuanfeng<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Starte working on JanusGraph to add to Neo4j\/Gremlin3<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : reports Strings encoding and Unicode-block (when available)<\/li>\n<li>Ambassador : reports framework founds (first 6, more as we go).<\/li>\n<li>Ambassador : reports how frequently an analysis yield results to compare with current situation<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Classes where declaration order differs from : use, const, properties and methods.<\/li>\n<li>New analysis : Could use interface (but implements is missing)<\/li>\n<li>New analysis : Cant Inherit Abstract Method (PHP 7.2 upgrade)<\/li>\n<li>New analysis : use session_start() options<\/li>\n<li>Updated analysis : Dynamica method calls cover {} too<\/li>\n<li>Checked unit tests : 2305 \/ 2305 test pass (100% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Checked code on early PHP 7.2 version<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.11.7<\/h2>\n<p class=\"date\">2017-06-12 &#8211; Long Armed Ape Monkey<\/p>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : report detected patterns (2 firsts)<\/li>\n<li>None report : for when dump is sufficient<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : could factor functioncalls<\/li>\n<li>New analysis : PSR-* usage<\/li>\n<li>New analysis : support for Judy and Gender extensions<\/li>\n<li>Added thema for Compatibility PHP 7.3<\/li>\n<li>Added thema for Dependency Injection<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed edge case where classes starting with &#8216;namespace&#8217; where mistakenly processed<\/li>\n<li>Removed Block from CIT<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.11.6<\/h2>\n<p class=\"date\">2017-06-05 &#8211; Red Bottomed Horse Monkey<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Removed singleton to Config. WIP<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : reports usage of PSR 3,6,7,11,13,16.<\/li>\n<li>UML : report now protects file names<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Ext stats<\/li>\n<li>New analysis : report mixed concatenation \/ interpolation strings<\/li>\n<li>Updated analysis : htmlentities actually uses combinaison, not alternatives,<\/li>\n<li>Updated analysis : Close Tag consistency ignores __HALT_COMPILER files<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.11.5<\/h2>\n<p class=\"date\">2017-05-30 &#8211; Intelligent Stone Monkey<\/p>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : fixed visibility suggestion<\/li>\n<li>New report : Dependency wheel<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : avoid typehinting with classes<\/li>\n<li>New analysis : implemented methods must be public<\/li>\n<li>New analysis : no reference on left of assignement<\/li>\n<li>New analysis : Could typehint with instanceof<\/li>\n<li>Updated analysis : Useless parenthesis cover clone, yield, yield from.<\/li>\n<li>Updated analysis : Make One Call also reports nested calls<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Split functions and closures,<\/li>\n<li>Split classes and anonymous classes<\/li>\n<li>Split variable with definitions (Property, Static and Global)<\/li>\n<li>File count is always reported (even 0)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.11.4<\/h2>\n<p class=\"date\">2017-05-22 &#8211; Six Eared Macaque<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Results : returns now multiple results at once<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New report : codeflower<\/li>\n<li>Ambassador : report usage of Debug functions, browscap<\/li>\n<li>Ambassador : omits 0 in donuts<\/li>\n<li>Ambassador : faceted search for compatiblity<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report functions whose return is not used<\/li>\n<li>New analysis : only variable can be passed by reference<\/li>\n<li>Added limits to all in-depth searches<\/li>\n<li>Checked unit tests : 2216 \/ 2216 test pass (100% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed edge case, where return is finished by a close tag<\/li>\n<li>Split Variables into Variables, Objects and Arrays.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.11.3<\/h2>\n<p class=\"date\">2017-05-15 &#8211; Sun Deity of Mao<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Speed up batch processing for lists of analysis<\/li>\n<li>Split data collection from the initial dump.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : Upgraded presentation of issues, and internals links.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Sphinx extension<\/li>\n<li>New analysis : GRPC extension<\/li>\n<li>New analysis : reports arrays that are randomly sorted.<\/li>\n<li>New analysis : report multiple catch clauses<\/li>\n<li>Updated analysis : direct injections include all SERVER_* values<\/li>\n<li>Upgrade for PHP 7.1.15 and 7.0.19<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Split Functioncall into Functioncall, MethocallCall and Newcall.<\/li>\n<li>Added support for &#8216;namespace&#8217; in any full name.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.11.2<\/h2>\n<p class=\"date\">2017-05-08 &#8211; Scorpion Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Code cleaning, and more stability<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Report preference between != and &lt;&gt;<\/li>\n<li>New analysis : report empty regex and wrong delimiters<\/li>\n<li>Added protection for $ in RegexDelimiters<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.11.1<\/h2>\n<p class=\"date\">2017-05-01 &#8211; Ruler of Women&#8217;s Country<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed handling for large list of data in gremlin queries<\/li>\n<li>Handles static in anonymous classes correctly<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Reports handle traits like class.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : ends arrays with , or not (favorite)<\/li>\n<li>New analysis : suspicious comparison<\/li>\n<li>New analysis : strange spaces in strings<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Arrays are now Arrayliteral, split from Functioncall<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.11.0<\/h2>\n<p class=\"date\">2017-04-24 &#8211; Immortal Ruyi<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Removed prepared statements from loops in dump<\/li>\n<li>made Gremlin cache compatible with 32bits platforms<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : first work on upgrading visibilities for properties.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : could use str_repeat()<\/li>\n<li>New analysis : Crc32() Might Be Negative<\/li>\n<li>Update analysis : Queries in loop reports cubrid and sqlsrv, prepared statements.<\/li>\n<li>Update analysis : type mismatch for indices works on constants too.<\/li>\n<li>Update analysis : Loop calling covers less ground<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Split function and method entities for differentiated processing<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.10.9<\/h2>\n<p class=\"date\">2017-04-17 &#8211; Single Horned Rhinoceros King<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>File extensions are processed before include\/ignore dirs.<\/li>\n<li>Reduced number of DEFINITION links, leading to less processing.<\/li>\n<li>Added several assertion() in the code<\/li>\n<li>Added assertions report in doctor (better leave them out with phar)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added support for PHP 7.0.18 and 7.1.4<\/li>\n<li>Ambassador : better layout for favorites<\/li>\n<li>Zend Framework : 8 new components supported<\/li>\n<li>Zend Framework : now supports zendframework\/zendframework too<\/li>\n<li>Zend Framework : report unused components<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report nested Use expressions<\/li>\n<li>New analysis : report repeated regex (to be federated)<\/li>\n<li>New analysis : report code that output directly to std<\/li>\n<li>Updated analysis : Should use this now omits overwritten methods<\/li>\n<li>New analysis : report overwritten methods<\/li>\n<li>Upgraded analysis : 2123 \/ 2123 test pass (100% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.10.8<\/h2>\n<p class=\"date\">2017-04-10 &#8211; King of Spiritual Touch<\/p>\n<ul>\n<li>Report\n<ul>\n<li>Slim report : list of routes used.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report Group Use Declaration (PHP 7.0+)<\/li>\n<li>Zend Framework : 30 components are now covered.<\/li>\n<li>Slim : No echo in route callable and Inventory of routes.<\/li>\n<li>PHP : list of new PHP 7.2 functions.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Sped up loading time by 10%.<\/li>\n<li>Added support for PHP6 binary string : $a = u&#8217;b&#8217;;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.10.7<\/h2>\n<p class=\"date\">2017-04-03 &#8211; Immortal of Antelope Power<\/p>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : fixed composer report.<\/li>\n<li>Added report for Composer (beta phase)<\/li>\n<li>Added report for Slim framework.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Added support for Slim versions.<\/li>\n<li>Added 10 new components for Zend Framework 3<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed support for $ in file names.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.10.6<\/h2>\n<p class=\"date\">2017-03-27 &#8211; Immortal of Elk Power<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Major speed up of loading and analysis<\/li>\n<li>Fixed themes configuration.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : report cookies usage, infinite and NAN usage<\/li>\n<li>Zend Framework : Report incompatibilites component\/version for ZF3<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded analysis : 1941 \/ 1941 test pass (100.00% pass)<\/li>\n<li>New analysis : Zend Framework 3 Deprecated<\/li>\n<li>New analysis : Zend cache, view, db.<\/li>\n<li>New analysis : Report missing type tests.<\/li>\n<li>New analysis : suggest setcookie() with safe arguments<\/li>\n<li>New analysis : Do not cast to Int<\/li>\n<li>New analysis : CakePHP classes compatibilities from 2.5 to 3.3<\/li>\n<li>Upgraded analysis : instanceof doesn&#8217;t report traits anymore<\/li>\n<li>Upgraded analysis : mb_ereg has options in the 4th arguments<\/li>\n<li>Upgraded analysis : more strange names<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Reviewed most of the load processing.<\/li>\n<li>Reduced the number of &#8216;fullnspath&#8217; properties.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.10.5<\/h2>\n<p class=\"date\">2017-03-13 &#8211; Immortal of Tiger Power<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Collect graph size in dump.sqlite<\/li>\n<li>Collect memory usage in dump.sqlite<\/li>\n<li>Now uses the calling PHP version to run all parts of exakat (no config)<\/li>\n<li>Doctor report the ran gremlin version.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ported the Zend Framework report to ambassador<\/li>\n<li>Added regex delimiter in favorites.<\/li>\n<li>Ambassador : syntax coloring<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : could be typehinted &#8216;callable&#8217;<\/li>\n<li>New analysis : encoded letters in strings for security<\/li>\n<li>New analysis : report arguments that may be callable<\/li>\n<li>New analysis : report strangely named variables<\/li>\n<li>New analysis : report strangely named constants<\/li>\n<li>New analysis : too many FindsBy*() methods<\/li>\n<li>Updated analysis : Useless Instructions doesn&#8217;t report array_merge(_recursive) with one argument<\/li>\n<li>Updated analysis : array_replace handles &#8230;<\/li>\n<li>Updated analysis : 7.2 deprecation with assert()<\/li>\n<li>Generalized usage of commons for CIT<\/li>\n<li>Added first 4 set of analysis for Zend Framework 3<\/li>\n<li>Added support for dynamic new $a[i];<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed fullnspath with new on functioncall<\/li>\n<li>Reduced the number of fullnspath loaded<\/li>\n<li>Added support for &#8216;s'() as functioncall<\/li>\n<li>Fixed case where file names has &#8216; &#8216; in it<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.10.4<\/h2>\n<p class=\"date\">2017-03-06 &#8211; Dragon King of the West Sea<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Ignore some classic files by default (README, LICENSE&#8230;)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : protection of HTML values<\/li>\n<li>PHPcompilation : fixed export to stdout<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : report useless else branches<\/li>\n<li>New analysis : should regenerate session Id, for PHP and Zend Framework<\/li>\n<li>Added support for Extension Data structures (ext\/ds)<\/li>\n<li>Upgraded analysis : Hardcoded Hash<\/li>\n<li>Speed up analysis for extensions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed edge case where a constant was used inside a ternary operator<\/li>\n<li>Fixed processing of labels<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.10.3<\/h2>\n<p class=\"date\">2017-02-27 &#8211; Dragon King of the Jing River<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added URL glossary to Manual.<\/li>\n<li>Extended CS ruleset<\/li>\n<li>Use exakat\/exakat as user\/login for git.<\/li>\n<li>New helper to rename analysis<\/li>\n<li>Project command now accept -P\/-T to run one analysis\/Thema directly<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New report style : Codesniffer<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : suggest usage for array_column()<\/li>\n<li>New analysis : __DIR__ must be concatenated with a string starting with &#8216;\/&#8217;<\/li>\n<li>New analysis : report usage of parent, self and static outside a class\/trait<\/li>\n<li>New analysis : report properties used only in one method<\/li>\n<li>New analysis : report properties used only once at all<\/li>\n<li>New analysis : multiple aliases per class<\/li>\n<li>Updated analysis : Fopen() mode support &#8216;e&#8217; option (7.1.2 + )<\/li>\n<li>Updated analysis : Make One Call covers str_replace, substr_replace, preg_replace*<\/li>\n<li>Updated analysis : Unused arguments : now ignores arguments from interface or parent<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Removed double DEFINITION link. Faster loading, less processing.<\/li>\n<li>Fixed an edge case when function name is boolean or null.<\/li>\n<li>Cleaned atom and tokens names<\/li>\n<li>Fixed edge case when object is instantiated in a ternary<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.10.2<\/h2>\n<p class=\"date\">2017-02-20 &#8211; Water Lizard Dragon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Text format now understand -T, -P to extract only some of the results.<\/li>\n<li>Fixed dump of extends.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Added support for PHP 7.1.2 and PHP 7.0.16<\/li>\n<li>New analysis : report forgotten &#8216;throw&#8217; keyword.<\/li>\n<li>New analysis : report class \/ function confusing name<\/li>\n<li>Added support for libsodium<\/li>\n<li>Upgraded PHP Relaxed Keyword : Ignore properties.<\/li>\n<li>Upgraded analysis : 1824 \/ 1826 test pass (99.9% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed a bug that mistakes native PHP classes for functions<\/li>\n<li>Fixed rare situation with grouped const\/function.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.10.1<\/h2>\n<p class=\"date\">2017-02-13 &#8211; King of Wuji Kingdom<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Report SVN revision when updating or not.<\/li>\n<li>Default reports are in config.<\/li>\n<li>Configure now supports include_dirs, to include files.<\/li>\n<li>Project name is now noted in datastore.<\/li>\n<li>Inventories is a default themas; PHP Compatibility &lt; 5.6 are not default anymore.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Documentation\n<ul>\n<li>Fixed outgoing links<\/li>\n<li>Better coverage of PHP functions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added &#8216;Inventories&#8217; report : reports all names and literals<\/li>\n<li>Ambassador : Added list of included files, Yield From and classes stats<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New Analysis : Strange Names For Methods (Classes\/StrangeName)<\/li>\n<li>New Analysis : SQL queries (Type\/Sql)<\/li>\n<li>New Analysis : Avoid Non WordPress Globals (WordPress\/AvoidOtherGlobals)<\/li>\n<li>Upgraded analysis : Should be single quote, escape sequences refined.<\/li>\n<li>Upgraded analysis : Should Preprocess now support determinist PHP functions<\/li>\n<li>Upgraded analysis : 1817 \/ 1824 test pass (99.6% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed LOC counting.<\/li>\n<li>Fixed edge case when closure is directly use as argument<\/li>\n<li>Fixed double inventories for Use&#8217;s Definitions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.10.0<\/h2>\n<p class=\"date\">2017-02-06 &#8211; Azure Lion<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Replacement of booleans with constants (WIP)<\/li>\n<li>Removed PHPloc (merged features into load)<\/li>\n<li>Added coding standard for Code Sniffer (ruleset.xml)<\/li>\n<li>PHP version used default to running script version<\/li>\n<li>Now reading Token Constants from the binaries<\/li>\n<li>Doctor reports project configuration if -p is used<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New Analysis : No Boolean As Default<\/li>\n<li>New Analysis : Raised Access Level<\/li>\n<li>New Analysis : Recommend Wpdb-&gt;prepare when variables are in query<\/li>\n<li>Directive suggestion now include error_log<\/li>\n<li>Upgraded analysis : UselessParenthesis also checks Typehint<\/li>\n<li>Upgraded analysis : 1804 \/ 1811 test pass (99.6% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Reinforced detection of parsable PHP script<\/li>\n<li>Fixed Files command : it now cleans data before running<\/li>\n<li>Removed warning about memory<\/li>\n<li>Index creation made lighter<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.9.9<\/h2>\n<p class=\"date\">2017\/01\/30 &#8211; Pilanpo Bodhisattva<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Moving true\/false to constants<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : Added &#8216;Compilation&#8217; and Version compatibility reports.<\/li>\n<li>Prepared collection of dependencies in dump<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New Thema : Compatibility PHP 7.2<\/li>\n<li>New analysis : Deprecated Features of PHP 7.2<\/li>\n<li>New analysis : Removed Function for PHP 7.2<\/li>\n<li>New preference : New Line Style<\/li>\n<li>Upgraded analysis : 1781 \/ 1802 test pass (98.9% pass)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.9.8<\/h2>\n<p class=\"date\">2017-01-23 &#8211; Multiple Eyed Creature<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Moved &#8216;Truthy\/Falsy&#8217; as &#8216;boolean&#8217; characteristics<\/li>\n<li>Updated Gremlin3 interface to handle Groovy maps<\/li>\n<li>Added default name when creating project<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added checks on merged table at Dump stage<\/li>\n<li>Added support for PHP 7.1.1 and 7.0.15<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : variables assigned twice or more<\/li>\n<li>New preference : new x() \/ new x;<\/li>\n<li>Upgraded analysis : 1785 \/ 1794 test pass (99.5% pass)<\/li>\n<li>Fixed Interface usage : missing interfaces extends interfaces<\/li>\n<li>Added extra check for Functioncalls<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for instanceof + several names<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.9.7<\/h2>\n<p class=\"date\">2017-01-16 &#8211; Hundred Eyed Demon Lord<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed constant names for tokens in Load<\/li>\n<li>Changed duplication check to dedup(). Cleaned analysis for duplicates.<\/li>\n<li>Speed but for large projects. Work in Progress.<\/li>\n<li>Reduced usage of static properties<\/li>\n<li>Better detection of PHP scripts during project<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Fixed generation of inventories when no target is provided<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Could Be Protected Property (not a public)<\/li>\n<li>New analysis : avoid large literal arrays in local variables.<\/li>\n<li>New analysis : report long arguments.<\/li>\n<li>Removed analysis : Structures\/EchoArguments (double with Echo With Concat)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed list of constants for PHP 7.1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.9.6<\/h2>\n<p class=\"date\">2017-01-09 &#8211; Spider Demons<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for report\/analysis theme list in config (exakat and project)<\/li>\n<li>Better cleaning of projects<\/li>\n<li>Doctor : Initialisation with themes\/reports; Reports executable being used.<\/li>\n<li>Added a log for gremlin Queries<\/li>\n<li>Rebuild the server command<\/li>\n<li>Added &#8216;catalog&#8217; command<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Split Phpconfiguration into eponymous and Phpcompilation<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : avoid Glob, use scandir without sorting.<\/li>\n<li>New analysis : always configure ext\/sqlite3 FetchRow()<\/li>\n<li>New analysis : no string with append<\/li>\n<li>Removed analysis : Structures\/ForeachSourcesNotVariable<\/li>\n<li>Upgraded Analysis &#8216;Should Import Functions&#8217;<\/li>\n<li>Upgraded analysis : 1764 \/ 1773 test pass (99.5% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added &#8216;aliased&#8217; property to nodes.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.9.5<\/h2>\n<p class=\"date\">2017-01-04 &#8211; Immortal Ziyang<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Better check of PHP version<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : report analysis settings<\/li>\n<li>PHP Compilations : supports all extensions<\/li>\n<li>New report : Inventories<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Don&#8217;t Use Fallback to Global space<\/li>\n<li>New analysis : MongoDB (ext\/mongo version 3)<\/li>\n<li>New analysis : zbarcode<\/li>\n<li>Bug : Fixed intval for octals in Arrays\/MultipleIdenticalKeys<\/li>\n<li>Removed analysis : Php\/InconsistantClosingTag (double)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Ranking arguments, not functioncall<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.9.4<\/h2>\n<p class=\"date\">2016-12-19 &#8211; Lady of Jinsheng Palace<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Rewrote the concurrence check (removed needs for ext\/sem)<\/li>\n<li>Results are never double anymore<\/li>\n<li>Upgraded gremlin calls, to handle \\n<\/li>\n<li>Dump cleans the previous values before dumping<\/li>\n<li>Excluded namespaces classes when searching for external libraries<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador : extension usage, inventories, global lists, stats, PHP Compilation directives<\/li>\n<li>Covers more compilation directives (Not finished)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Final by Ocramius<\/li>\n<li>Upgraded : Comparison with == : added curl_exec<\/li>\n<li>Upgraded : isset with constant (mistake on properties as arrays)<\/li>\n<li>Upgraded : Avoid using now uses full NS path<\/li>\n<li>Upgraded : Useless instructions handles for() correctly<\/li>\n<li>Upgraded : Recursive, IsGenerator and Loop Calling includes yield from<\/li>\n<li>Upgraded analysis : 1741 \/ 1750 test pass (99.5% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.9.3<\/h2>\n<p class=\"date\">2016-12-12 &#8211; Purple-Gold Bells<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Lots of cleaned code<\/li>\n<li>Harmonized data for extensions<\/li>\n<li>Stop &#8216;project&#8217; if no code is available<\/li>\n<li>Now using stub in phar.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added directives, bugfixes, external services and<\/li>\n<li>Added support for PHP 7.0.14 and 5.6.29<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : WordPress, recommend prepare()<\/li>\n<li>More favorite reports : final ?&gt; and unset()\/(unset)<\/li>\n<li>Reduced number of double reports for many analysis<\/li>\n<li>Update : Fixed analysis with $THIS<\/li>\n<li>Upgrade : report useless casting of comparisons<\/li>\n<li>Update : Should use this takes into account parent<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.9.2<\/h2>\n<p class=\"date\">2016-12-05 &#8211; Golden Haired Hou<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>First version of Exakat for docker (beta)<\/li>\n<li>Added a waiting loop in cleandb<\/li>\n<li>Docs include a list of new analysis per version<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added 2 first inventories, Appinfo() in Ambassador<\/li>\n<li>Favorites now reports global\/$GLOBALS<\/li>\n<li>Restore composer.lock report<\/li>\n<li>Upgraded uselessReturn for the final return.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis for Newt, Nsapi,<\/li>\n<li>New analysis : __ in methods names<\/li>\n<li>New analysis : Too many local variables<\/li>\n<li>New analysis : Avoid array_push()<\/li>\n<li>Upgraded ext\/apache coverage<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.9.1<\/h2>\n<p class=\"date\">2016-11-28 &#8211; Sai Tai Sui<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Docker supported in exakat\/config.ini for PHP binaries.<\/li>\n<li>Added exakatSince in analysis documentation<\/li>\n<li>Added some missing tokens in anonymize command<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added several new analysis for PHP 7.1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>new analysis : find methods that could return Void<\/li>\n<li>new analysis : find malformed octal sequence in strings<\/li>\n<li>new analysis : spot rethrown exception<\/li>\n<li>new analysis : reach the last element<\/li>\n<li>new analysis : find undefined Zend Framework classes (2.0 to 3.0)<\/li>\n<li>Upgraded analysis : 1706 \/ 1714 test pass (99.5% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed handling references (some were missing)<\/li>\n<li>Fixed handling of ellipsis (some were missing)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.9.0<\/h2>\n<p class=\"date\">2016-11-21 &#8211; Python Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Project now include &#8216;Preference&#8217; analysis<\/li>\n<li>Dump is now incremental (-u option), and doesn&#8217;t need to be run in paralell<\/li>\n<li>Added new hashAnalysis table, to handle generic results from analysis.<\/li>\n<li>Added project name in the graph.<\/li>\n<li>New command &#8216;status&#8217; to report the current status of exakat<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Ambassador includes &#8216;Preferences&#8217; section and new menu system<\/li>\n<li>Upgraded progressbar to display project processing<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Early Bail Out (with if\/then)<\/li>\n<li>New analysis : PHP 7.1 backward incompatibilities with microseconds<\/li>\n<li>New analysis : WordPress : recommend using WP api, not PHP.<\/li>\n<li>Upgraded &#8216;Constant condition&#8217; to include do..while()<\/li>\n<li>Upgraded &#8216;Useless Abstract&#8217; to include methodless classes<\/li>\n<li>Upgraded analysis : 1687 \/ 1697 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added &#8216;Array&#8217; to list of determinist functions (more constants are spotted)<\/li>\n<li>Fixed &#8216;Name&#8217; for Array Short Syntax.<\/li>\n<li>Fixed variadic support<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.8.9<\/h2>\n<p class=\"date\">2016-11-14 &#8211; Yellow Brows Great King<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed and document -tgz and -zip option of init<\/li>\n<li>Removed progress folder<\/li>\n<li>Made MagicNumber a parallel task in Project.<\/li>\n<li>Turned some die into assertion()<\/li>\n<li>.phar doesn&#8217;t report any PHP errors.<\/li>\n<li>Checked compilation with PHP 5.3-&gt;7.2<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Removed Faceted report<\/li>\n<li>Added Bugfixes for PHP 7.0.13, 5.6.28 and PHP 7.2<\/li>\n<li>Added &#8216;One variable string&#8217; to Radwell report<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Object Calisthenics #1, #4<\/li>\n<li>New analysis : check that properties are all set at constructor time.<\/li>\n<li>New analysis : spot useless checks<\/li>\n<li>Updated UndefinedParentMP to take PHP ext classes into account<\/li>\n<li>Upgraded &#8216;array_merge in loops&#8217; with file_put_contents<\/li>\n<li>Upgraded &#8216;useless parenthesis&#8217; with math operations<\/li>\n<li>Upgraded analysis : 1666 \/ 1682 test pass (99% pass).<\/li>\n<li>Added debug Query method to analysis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed Files to compile first, then count tokens<\/li>\n<li>Find Ext Lib handle UT classes better<\/li>\n<li>Added limit to &#8216;code&#8217; before loading into database. There is a 2M limit.<\/li>\n<li>Fixed edge case with nested foreach()<\/li>\n<li>Fixed segmentation fault when getting tokens from a script with wrong encoding<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.8.8<\/h2>\n<p class=\"date\">2016-11-07 &#8211; Apricot Immortal<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added concurency test to avoid running several instance at the same time<\/li>\n<li>Report error when it happens with git clone<\/li>\n<li>Added UT classes to external libraries<\/li>\n<li>Dump is now hidden until finished.<\/li>\n<li>Better detection of java and composer (Thanks Julien)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New report : Radwell<\/li>\n<li>New report : PhpConfiguration helping with configure and php.ini<\/li>\n<li>Ambassador : Fixed dashboard values<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : time() vs strtotime(&#8216;now&#8217;)<\/li>\n<li>New analysis : useless casting<\/li>\n<li>New analysis : No Isset() with Empty()<\/li>\n<li>New analysis : don&#8217;t echo errors<\/li>\n<li>New analysis : ext\/rar<\/li>\n<li>New analysis : use Class::class when possible<\/li>\n<li>Added array_key_exists() to slow functions list.<\/li>\n<li>Upgraded UpperCaseKeywords to handle partial uppercase<\/li>\n<li>Added reported directives for ext\/filter<\/li>\n<li>Upgraded &#8216;Variables used once&#8217; to exclude $this and arguments<\/li>\n<li>Upgraded Unreachable Code with break\/continue;<\/li>\n<li>Multiple Identical Keys now handles null, boolean, real.<\/li>\n<li>Upgraded analysis : 1652 \/ 1668 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Now spots \\true, \\false, \\null as Boolean and Null<\/li>\n<li>Removed &#8216;xargs too many arguments&#8217; error on Linux<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.8.7<\/h2>\n<p class=\"date\">2016-10-31 &#8211; Naked Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Upgraded Boolean and Integer to report results without storing them in graph<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : modernizable empty() calls<\/li>\n<li>New analysis : recommend Positive conditions<\/li>\n<li>New analysis : drop else after return<\/li>\n<li>Upgraded analysis : unreacheable code handles if\/then with returns.<\/li>\n<li>Added tests for Boolean and Null<\/li>\n<li>More not Hashes dict.<\/li>\n<li>Upgraded analysis : 1637 \/ 1650 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed line number of <!--?= &lt;\/li&gt; &lt;li&gt;Fixed token on arguments&lt;\/li&gt; &lt;\/ul&gt; &lt;\/li&gt; &lt;\/ul&gt; &lt;h2&gt;Version 0.8.6&lt;\/h2&gt; &lt;p class=\"date\"&gt;2016-10-24 - Fuyun Sou&lt;\/p&gt; &lt;ul&gt; &lt;li&gt;Architecture &lt;ul&gt; &lt;li&gt;New command to ping a queue&lt;\/li&gt; &lt;li&gt;More documentation&lt;\/li&gt; &lt;\/ul&gt; &lt;\/li&gt; &lt;\/ul&gt; &lt;ul&gt; &lt;li&gt;Report &lt;ul&gt; &lt;li&gt;Ambassador report sped up multiple times&lt;\/li&gt; &lt;li&gt;Text, Json and XML all report only analysis (not the dependencies)&lt;\/li&gt; &lt;\/ul&gt; &lt;\/li&gt; &lt;\/ul&gt; &lt;ul&gt; &lt;li&gt;Analysis &lt;ul&gt; &lt;li&gt;New analysis : suggest ternary instead of Ifthen&lt;\/li&gt; &lt;li&gt;New analysis : check for returned value usage&lt;\/li&gt; &lt;li&gt;Added support for PHP 7.0.12 and 5.6.27&lt;\/li&gt; &lt;li&gt;Added more bugs fixing from extensions&lt;\/li&gt; &lt;li&gt;Fixed analysis for Zend Framework 1&lt;\/li&gt; &lt;li&gt;Ignore $this in variable used once&lt;\/li&gt; &lt;li&gt;Fixed report with unlimited arguments functions&lt;\/li&gt; &lt;li&gt;Overwritten literals : Ignore assignations in for()&lt;\/li&gt; &lt;li&gt;Upgraded old PHP 5.* analysis to Gremlin 3&lt;\/li&gt; &lt;li&gt;Upgraded analysis : 1639 \/ 1645 test pass (99% pass). &lt;\/li&gt; &lt;\/ul&gt; &lt;\/li&gt; &lt;\/ul&gt; &lt;ul&gt; &lt;li&gt;Tokenizer &lt;ul&gt; &lt;li&gt;Fixed precedence between require and .&lt;\/li&gt; &lt;li&gt;Better fullcode for &lt;?= &lt;\/li&gt; &lt;\/ul&gt; &lt;\/li&gt; &lt;\/ul&gt; &lt;h2&gt;Version 0.8.5&lt;\/h2&gt; &lt;p class=\"date\"&gt;2016-10-17 - Naked Demon&lt;\/p&gt; &lt;ul&gt; &lt;li&gt;Architecture &lt;ul&gt; &lt;li&gt;Moved all classes under Exakat folder for clean hierarchy&lt;\/li&gt; &lt;\/ul&gt; &lt;\/li&gt; &lt;\/ul&gt; &lt;ul&gt; &lt;li&gt;Report &lt;ul&gt; &lt;li&gt;Ambassador : restored line number in display&lt;\/li&gt; &lt;\/ul&gt; &lt;\/li&gt; &lt;\/ul&gt; &lt;ul&gt; &lt;li&gt;Analysis &lt;ul&gt; &lt;li&gt;New analysis, check for substr() comparisons with literals&lt;\/li&gt; &lt;li&gt;New analysis, suggest boolean cast, instead of Ternary.&lt;\/li&gt; &lt;li&gt;New analysis, spot 3 levels of if\/then&lt;\/li&gt; &lt;li&gt;Upgraded 'hardcoded password', for kadm5 and hash_* functions&lt;\/li&gt; &lt;li&gt;Upgraded 'external libs', with Zend Framework&lt;\/li&gt; &lt;li&gt;Upgraded analysis : 1625 \/ 1638 test pass (99% pass). &lt;\/li&gt; &lt;\/ul&gt; &lt;\/li&gt; &lt;\/ul&gt; &lt;h2&gt;Version 0.8.4&lt;\/h2&gt; &lt;p class=\"date\"&gt;2016-10-10 - Lingkongzi&lt;\/p&gt; &lt;ul&gt; &lt;li&gt;Architecture &lt;ul&gt; &lt;li&gt;Moved Tasks into Exkat\\Tasks&lt;\/li&gt; &lt;li&gt;Fixed findExternalLibs&lt;\/li&gt; &lt;\/ul&gt; &lt;\/li&gt; &lt;\/ul&gt; &lt;ul&gt; &lt;li&gt;Report &lt;ul&gt; &lt;li&gt;Ambassador report got good annex, fixed settings and faceted search&lt;\/li&gt; &lt;li&gt;Omit clearPHP if not present in docs&lt;\/li&gt; &lt;\/ul&gt; &lt;\/li&gt; &lt;\/ul&gt; &lt;ul&gt; &lt;li&gt;Analysis &lt;ul&gt; &lt;li&gt;New analysis : detect multiple identical traits\/interface in CIT&lt;\/li&gt; &lt;li&gt;New analysis : suggest creating aliases to reduce code&lt;\/li&gt; &lt;li&gt;New analysis : spot aliases that may be reused again&lt;\/li&gt; &lt;li&gt;New analysis : hidden use, that are not at the beginning of the code&lt;\/li&gt; &lt;li&gt;Upgraded analysis : 1607 \/ 1618 test pass (99% pass). &lt;\/li&gt; &lt;li&gt;More documentations to many analysis&lt;\/li&gt; &lt;li&gt;HasMagicProperty report all magic methods &lt;\/li&gt; &lt;li&gt;Upgraded 'Useless Parenthesis' with more situations&lt;\/li&gt; &lt;li&gt;Upgraded 'Unchecked resources' with 2 more situations&lt;\/li&gt; &lt;li&gt;Fixed several analysis when using Boolean and Null as a class&lt;\/li&gt; &lt;li&gt;Fixed analysisIsNot with arrays&lt;\/li&gt; &lt;li&gt;Removed include-like from undefined functions&lt;\/li&gt; &lt;li&gt;Arrays\/AmbiguousKeys : Extended to arrays calls&lt;\/li&gt; &lt;\/ul&gt; &lt;\/li&gt; &lt;\/ul&gt; &lt;ul&gt; &lt;li&gt;Tokenizer &lt;ul&gt; &lt;li&gt;Fixed edge case with return ?--><\/li>\n<li>Fixed path for reporting<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.8.3<\/h2>\n<p class=\"date\">2016-10-03 &#8211; Guzhi Gong<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Created temp folder .exakat in projects_dir<\/li>\n<li>Removed mentions of float, only using Real<\/li>\n<li>Moved Config to Exakat\\Config<\/li>\n<li>More examples in docs<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added settings and files to Ambassador<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis for dependant Traits<\/li>\n<li>Added new Theme &#8216;Cakephp&#8217; with 6 analysis for migration<\/li>\n<li>New values for Not-a-hash<\/li>\n<li>Unresolved Catch now takes Throwable into account<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed edge case where return is used inside if\/then without {} nor value.<\/li>\n<li>Fixed &#8216;code&#8217; and &#8216;token&#8217; for ?: and ()<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.8.2<\/h2>\n<p class=\"date\">2016-09-26 &#8211; Jinjie Shiba Gong<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>More examples in docs<\/li>\n<li>Fixed &#8216;file&#8217; in results<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added more media for Ambassador<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis for count\/strlen compared to 0<\/li>\n<li>Upgraded analysis : 1563 \/ 1579 test pass (99% pass).<\/li>\n<li>Backported all 4 WordPress analysis (wpdb, nonce usage)<\/li>\n<li>Added new WordPress analysis : variable escaping in templates<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed &lt;?= so it is handled like echo<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.8.1<\/h2>\n<p class=\"date\">2016-09-19 &#8211; Babo&#8217;erben<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added main Try\/Catch<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added &#8216;Ambassador&#8217; report.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded analysis : 1540 \/ 1561 test pass (99% pass).<\/li>\n<li>More documentation (examples, glossary)<\/li>\n<li>Added a list of stopwords for No Hardcoded Hash<\/li>\n<li>Upgraded analysis &#8216;No Hardcoded Path&#8217; with protocols and glob with wildcards<\/li>\n<li>Upgraded analysis &#8216;No Hardcoded Hash&#8217; with stopwords<\/li>\n<li>Added new Analysis for portability : spot common Linux files<\/li>\n<li>Added new Analysis : use system temp dir, not hardcoded one<\/li>\n<li>New analysis that spot unused protected methods<\/li>\n<li>Added Time-to-fix and severity to all analysis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed edge case with if\/then and try\/catch<\/li>\n<li>Synchronized constants in Tokens\/Consts*.php<\/li>\n<li>Added support for PHP 7.2<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.8.0<\/h2>\n<p class=\"date\">2016-09-12 &#8211; Benbo&#8217;erba<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>More examples in the docs<\/li>\n<li>Better find root in export<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Prepared code for new report style<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : no throw in __destruct<\/li>\n<li>New analysis : spot empty blocks in control structures<\/li>\n<li>Update : Check parse_str and mb_parse_str()<\/li>\n<li>Upgraded analysis : 1524 \/ 1540 test pass (99% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed representation of [] and [index] with static properties<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.7.10<\/h2>\n<p class=\"date\">2016-09-05 &#8211; Nine Headed Bug<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added optional dependency to mbstring in Doctor<\/li>\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Added analysis for PHP 7.1 features<\/li>\n<li>Upgraded analysis : 1377 \/ 1510 test pass (91% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Removed parasit &#8216;void&#8217; added in sequences.<\/li>\n<li>Raised export max depth to 15.<\/li>\n<li>Fixed FQN for new without parenthesis<\/li>\n<li>Fixed support for PHP 5.5\/5.6.<\/li>\n<li>Added support for iterable<\/li>\n<li>Checked support for extensions and ignore dirs<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.7.9<\/h2>\n<p class=\"date\">2016-08-29 &#8211; Wansheng Princess<\/p>\n<p>fallback FQN in functions, link constant to definitions.<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added several features at Loading time : mark global variables in $GLOBALS,<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Added analysis for impossible comparisons (count($a) &lt; or &gt;= 0)<\/li>\n<li>Added analysis for PHP 7.1 : removed directives, added functions<\/li>\n<li>Upgraded analysis : 1485 \/ 1522 test pass (97.5% pass).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed edge case with &lt;?= $v;<\/li>\n<li>Fixed priorities between include and .<\/li>\n<li>Better support of trait in classes<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.7.8<\/h2>\n<p class=\"date\">2016-08-22 &#8211; Wansheng Dragon King<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Prepared databases for PHP 7.2<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Reports that preg_match results are not checked<\/li>\n<li>Report List short syntax usage.<\/li>\n<li>Upgraded analysis : 1224 \/ 1493 test pass.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.7.7<\/h2>\n<p class=\"date\">2016-08-17 &#8211; Water Repelling Golden Crystal Beast<\/p>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded Bug database to handle PHP 7.0.10, 5.6.24 and 5.5.38<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.7.5<\/h2>\n<p class=\"date\">2016-07-19 &#8211; Jade Faced Princess<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added &#8216;anonymize&#8217; command, that anonymize files and projects<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>new analysis : recommend preg_replace_callback_array() when there are several call to preg_replace_callback_array()<\/li>\n<li>Upgraded analysis : 1103 \/ 1464 test pass.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Lots of fixes for stability : tested on 28M tokens<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.7.4<\/h2>\n<p class=\"date\">2016-07-12 &#8211; Great Sage Who Pacifies Heaven<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Entirely rewrote the &#8216;Tokenizer&#8217; part<\/li>\n<li>Upgraded database schema<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded analysis : 1027 \/ 1461 test pass.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Entirely rewrote the &#8216;Tokenizer&#8217; part<\/li>\n<li>1851 UT pass correctly (extra 51)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.6.7<\/h2>\n<p class=\"date\">2016-05-30 &#8211; Red boy<\/p>\n<ul>\n<li>Report\n<ul>\n<li>Added List With Keys in Appinfo()<\/li>\n<li>Added by-reference functions mention<\/li>\n<li>Now reporting good visibility\/static for __callstatic<\/li>\n<li>Added bug info for PHP 7.0.7, 5.5.36, 5.6.21<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New : recommend instanceof over is_object()<\/li>\n<li>Fixed several ignored limitations, due to case : $phpversion<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed &#8216;originclass&#8217; in namespaced use<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.6.6<\/h2>\n<p class=\"date\">2016-05-23 &#8211; Princess Iron Fan<\/p>\n<ul>\n<li>Report\n<ul>\n<li>New report, suggest disable_functions directive value.<\/li>\n<li>Added support for memcached directives<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : spot throw without new<\/li>\n<li>New analysis : suggest adding 2nd parameter to unserialize in PHP 7.0+<\/li>\n<li>New analysis : spot successive if\/then with the same condition<\/li>\n<li>Added support for zendoptimizer and suhosin extensions<\/li>\n<li>PHP7 indirect expression : added support for {} in properties<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Raised cycle count, to speed up building AST for large projects<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.6.5<\/h2>\n<p class=\"date\">2016-05-16 &#8211; Great Sage Who Pacifies Heaven<\/p>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : spot globals that may be turned into property<\/li>\n<li>New analysis : check that ZF1 classes are well located<\/li>\n<li>Upgraded &#8216;dangling foreach reference&#8217; to support key=&gt;value<\/li>\n<li>Better support for PHP 7 indirect expression<\/li>\n<li>More directives for xdebug<\/li>\n<li>Eval Without Try is PHP 7 only<\/li>\n<li>No Choice analysis is now case insensitive<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for keys in list() (PHP 7.1)<\/li>\n<li>Added support for constant visibility (PHP 7.2)<\/li>\n<li>Added support for Multi catch : catch(A|B $e) (PHP 7.1)<\/li>\n<li>Fixed bug with + and instanceof<\/li>\n<li>Fixed precedence between :: and ??<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.6.4<\/h2>\n<p class=\"date\">2016-05-09 &#8211; Bull Demon King<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Externalized the list of recognized libraries to Json<\/li>\n<li>Added &#8216;WordPress&#8217; and &#8216;Coding convention&#8217; as Recipes<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Initial report for Zend Framework. Still prototyping.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Accelerated analysis for Implicit GLobals variables<\/li>\n<li>New analyze : Indirect Injections (Security)<\/li>\n<li>New analyze : Should Use Coalesce (code upgrade)<\/li>\n<li>New analyze : Suggest dirname(__FILE__) =&gt; __DIR__<\/li>\n<li>Added &#8216;str_rot13&#8217; as unsafe &#8216;crypto&#8217;<\/li>\n<li>Properties without default can&#8217;t be redefined<\/li>\n<li>Added Yield and Yield From as structures without parenthesis needs<\/li>\n<li>Double Assignation, unless 2nd call is a functioncall (less false positives)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.6.3<\/h2>\n<p class=\"date\">2016-05-02 &#8211; Jade Faced Princess<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Removed several useless pieces of code (self analysis)<\/li>\n<li>Added documentation for WordPress Recipes<\/li>\n<li>Lengthened Cycle for tokenizer<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added bugfixes for PHP 7.0.6, 5.6.21, 5.5.35.<\/li>\n<li>Now reporting token counts per files<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Spot variable that holds $_GET, $_POST, $_REQUEST or $_COOKIE values (internal)<\/li>\n<li>New analysis : Report variables that are overwritten by themselves<\/li>\n<li>New analysis : Report useless switch (empty, 1 case only)<\/li>\n<li>Upgraded NoChoice to handle larger sequences<\/li>\n<li>Upgraded Useless Global to handle global $x \/ $GLOBALS[&#8216;x&#8217;] situations<\/li>\n<li>New analysis : WordPress Recipe : Unverified Nonce, Best Usage for $wpdb<\/li>\n<li>New analysis : Void for PHP 7.1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed but with Typehint<\/li>\n<li>Added phppowerpoint class in external libraries<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.6.2<\/h2>\n<p class=\"date\">2016-04-25 &#8211; Long Armed Ape Monkey<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed phar detection (based on ext\/phar)<\/li>\n<li>Cleaned code with myself<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>New report format : clustergrammer<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : same conditions in If \/ Then<\/li>\n<li>New analysis : spot dead code in catch expressions<\/li>\n<li>Static loops now exclude methods usage<\/li>\n<li>Indirect variable expression are stricter<\/li>\n<li>preg_* Option e has better support for delimiters<\/li>\n<li>Upgraded Direct Injection in case of concatenation<\/li>\n<li>Detect Ellipsis when counting arguments<\/li>\n<li>Could use short assignation : avoid $a += $a + 3;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Sped up Typehint detection<\/li>\n<li>No indexing for T_STRING in properties<\/li>\n<li>Reduced errors from token_get_all()<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.6.1<\/h2>\n<p class=\"date\">2016-04-18 &#8211; Red Bottomed Horse Monkey<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Prepared to support PHP 7.1<\/li>\n<li>Fixed bug in user \/ passwords when initing the project<\/li>\n<li>Better support for ::class when searching for libraries<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>UselessParenthesis : spot nested parenthesis<\/li>\n<li>Spot exceptions that are thrown but uncaught by the current code<\/li>\n<li>Support for ext\/lua,<\/li>\n<li>New : Check catch order in try\/catch<\/li>\n<li>Better identification of Composer classes, based on composer.json<\/li>\n<li>Now spot interfaces in use declarations (less undefined interfaces)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for PHP 7.1<\/li>\n<li>key =&gt; value in list() calls<\/li>\n<li>visibility for constants in Classes and Interfaces<\/li>\n<li>Accelerated up Typehint support<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.6.0<\/h2>\n<p class=\"date\">2016-04-11 &#8211; Intelligent Stone Monkey<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed a bug in Find external libraries<\/li>\n<li>Applied fixed based on new analysis audit<\/li>\n<li>Fixed a bug that prevented results to be prepared for report (Thanks Philippe G.)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Now reports reason for excluding a file from analysis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Logical Mistake (first version),<\/li>\n<li>New analysis : Iffectations (code restoration)<\/li>\n<li>New analysis : Common alternatives<\/li>\n<li>New analysis : No Choice (No alternatives)<\/li>\n<li>New analysis : Random_* Without Try (security risk)<\/li>\n<li>New analysis : Unknown PCRE options<\/li>\n<li>New analysis : Identical conditions<\/li>\n<li>New analysis : Hardcoded hashes<\/li>\n<li>Upgrade List with appends with variable name<\/li>\n<li>Upgrade \/e option detection<\/li>\n<li>Fixed detection of unused use, with long namespaces.<\/li>\n<li>Added finfo to ext\/finfo<\/li>\n<li>Finds exceptions that are reserved for later throwing<\/li>\n<li>Exclude anonymous classes from Already Defined Interface<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Extended cycle number to speed up tokenizer.<\/li>\n<li>Better escaping of file names<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.5.9<\/h2>\n<p class=\"date\">2016-04-04 &#8211; Six Eared Macaque<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>One progressbar per Recipe during project analysis<\/li>\n<li>report&#8217;s documentation<\/li>\n<li>Upgraded &#8216;External Lib&#8217; to ignore Composer folders.<\/li>\n<li>Fixed a bug about interpreting tokens<\/li>\n<li>Dump collects classes, interfaces, traits definitions<\/li>\n<li>Now storing project name in database for future use<\/li>\n<li>Removed PHP configuration modifications (error_reporting, display_errors)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added &#8216;Uml&#8217; report : hierarchy report<\/li>\n<li>Now reports Pear Usage<\/li>\n<li>Upgraded Bugfix database for 7.0.5, 5.6.20 and 5.5.34<\/li>\n<li>Report Yield (from) usage<\/li>\n<li>New external configuration files : bazar, github, docker, openshift<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Added detection for undefined classes in ZF (1.8 to 1.12)<\/li>\n<li>New : report undefined Traits<\/li>\n<li>Added support for parent\/grandparent when checking argument numbers<\/li>\n<li>Added support for V8js<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed bug in fullnspath for use within trait or class<\/li>\n<li>It is possible to reach a property on an array append<\/li>\n<li>Fixed AST between PHP 5 and 7 for globals<\/li>\n<li>Simplified ++ analysis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.5.8<\/h2>\n<p class=\"date\">2016-03-28 &#8211; Sun Deity of Mao<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Moved to self::, instead of static::.<\/li>\n<li>First UT for command line<\/li>\n<li>Sped up phploc. Prepare code for finite states, in Tasks.<\/li>\n<li>Prepare for Gremlin3 (moved gremlin calls to class)<\/li>\n<li>Reduced shell_exec usage<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Fixed display bugs in Devoops report<\/li>\n<li>Removed double analysis<\/li>\n<li>&#8216;Wrong number of arguments&#8217; now supports constructors<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded &#8216;No Hardcoded IP&#8217; to handle constants, spot domains<\/li>\n<li>Added support for TokyoTyrant<\/li>\n<li>New analysis : spot simple regex, and suggest strpos<\/li>\n<li>Excluded &#8220;$a[b]&#8221; from undefined constants<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed bug with nested call to echo.<\/li>\n<li>Fixed bug where concatenation ends on a &#8216;AS&#8217; keyword<\/li>\n<li>Added support of Constants in Foreach<\/li>\n<li>Fixed multiple bugs in Grouped Use<\/li>\n<li>Support for function as &#8216;class&#8217; in static calls<\/li>\n<li>Comparison accepts powers<\/li>\n<li>Added support for empty array short syntax in sequence<\/li>\n<li>Support constant with visibility<\/li>\n<li>Parenthesis may be the base for Arrays<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.5.7<\/h2>\n<p class=\"date\">2016-03-21 &#8211; Scorpion Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for folders in UT, for tests that requires several files<\/li>\n<li>Improved compatibility with PHPunit<\/li>\n<li>Moving gremlin_query() to Gremlin2 class<\/li>\n<li>Doctor also reports for phar<\/li>\n<li>Improved adaptation to PHP and Exakt in server mode<\/li>\n<li>Autoload shouldn&#8217;t die<\/li>\n<li>Fixed case when calling Phpexec<\/li>\n<li>Upgraded status presentation in server mode<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>More details for Global Variable list<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Now spotting class when it is inside a string<\/li>\n<li>Check for $this outside a trait\/class<\/li>\n<li>Check for ternary\/concatenation precedence<\/li>\n<li>Spot classes that attempt to extend final<\/li>\n<li>Spot set_exception_handler() that may need rework<\/li>\n<li>Refined array_merge analysis, in case of nested loops<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Yield [from] may be inside an array<\/li>\n<li>Refactored for\/foreach tokens<\/li>\n<li>Added support for a &#8216;Project&#8217; node<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.5.6<\/h2>\n<p class=\"date\">2016-03-14 &#8211; Ruler of Women&#8217;s Country<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Fixed some backward compatibility with PHP 5.4<\/li>\n<li>Started revamping &#8216;Status&#8217; command<\/li>\n<li>Centralized all tokenizations to PhpExec class<\/li>\n<li>Removed usage of __DIR__ and __FILE__<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Spot usage of empty() that can&#8217;t work on PHP 5.4<\/li>\n<li>Suggest using random_int instead of rand<\/li>\n<li>Upgraded &#8216;No Array_merge in loops&#8217; with array_merge_recursive<\/li>\n<li>Added support for scalar type hint in Undefined Classes<\/li>\n<li>New analysis : Better rand()<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Instanceof has lower precedence than comparison<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.5.5<\/h2>\n<p class=\"date\">2016-03-07 &#8211; Immortal Ruyi<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added default values for all neo4j_* configs<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added support for bugfixes in 7.0.4, 5.6.19 and 5.5.33<\/li>\n<li>Added support for bugfixes in 7.1.0-dev<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Added support for Typehint in Undeclared Classes<\/li>\n<li>Extended &#8216;Multiple Classes in One File&#8217; to interfaces and traits<\/li>\n<li>Added analysis for truthy and falsy<\/li>\n<li>Spot interfaces implemented by parents (Thanks PHP Inspect)<\/li>\n<li>Report usage for unsafe Curl options<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed emptyString inside a Heredoc<\/li>\n<li>Fixed bug where Sign has lower priority than Power<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.5.4<\/h2>\n<p class=\"date\">2016-02-29 &#8211; Nezha<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Removed some shell_exec() to help with portability<\/li>\n<li>Clean command now rebuilds an empty datastore<\/li>\n<li>Check the availability of php binaries before using<\/li>\n<li>Produce report in a hidden folder, then push it<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Report the list of bug fixes that apply to code<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Help using preg_match_all options<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed a bug with reference and instanceof<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.5.3<\/h2>\n<p class=\"date\">2016-02-22 &#8211; Li Jing<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>More UT<\/li>\n<li>Supports symlinks for neo4j&#8217;s folder<\/li>\n<li>Supports symlinks for &#8216;code&#8217; folder in projects<\/li>\n<li>Added upgrade command to check for exakat&#8217;s available versions and upgrade<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Spot CLI scripts<\/li>\n<li>Undefined Interfaces avoids self, parent, static<\/li>\n<li>Fixed bug in spotting undefined Interface<\/li>\n<li>Variable Used Once in a method are not arguments<\/li>\n<li>Added support for all structures in Double Assignation<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.5.2<\/h2>\n<p class=\"date\">2016-02-15 &#8211; Single Horned Rhinoceros King<\/p>\n<ul>\n<li>Analysis\n<ul>\n<li>Fixed functioncall detection with &#8217;empty&#8217;<\/li>\n<li>Refined &#8216;Buried assignation&#8217; analysis<\/li>\n<li>Fixed a bug when using definitions (class, trait, interface, functions&#8230;)<\/li>\n<li>Better support for case-insensitive constants<\/li>\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed bug in use statement<\/li>\n<li>Now spots PHP code in files without extension<\/li>\n<li>Upgraded support for grouped Use statement<\/li>\n<li>namespace may be a valid nsname part<\/li>\n<li>Fixed bracket reports in do&#8230;while<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.5.1<\/h2>\n<p class=\"date\">2016-02-08 &#8211; King of Spiritual Touch<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added test in UT to skip incompilable sources<\/li>\n<li>Stabilized tokenizer&#8217;s UT (partial)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>HTML protection in Devoops format<\/li>\n<li>No display of negative stats<\/li>\n<li>Added support for directives : wincache, xcache, apc, opcache<\/li>\n<li>Added support for eaccelerator and openssl<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis : Spot unknown PHP directive names<\/li>\n<li>Fixed Constants\/MultipleDefinedConstants<\/li>\n<li>Better detection of functioncalls (with List)<\/li>\n<li>Better spotting of ini_set arguments<\/li>\n<li>Unreachable code now finds die and exit<\/li>\n<li>ObjectReference won&#8217;t report references on scalar types<\/li>\n<li>Revamped &#8216;pregOptionE&#8217; analysis<\/li>\n<li>Cleaned code with too many arguments<\/li>\n<li>Removed useless print<\/li>\n<li>Better report of eval() usage<\/li>\n<li>Revamped &#8216;Dynamic code&#8217; report<\/li>\n<li>Fixed bug in Case\/Default that are empty<\/li>\n<li>Avoided sequences of sequences in Case\/Default<\/li>\n<li>Fixed Detection of classes&#8217; usage with extension<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed bracket detection on While and DoWhile<\/li>\n<li>Detect void in DoWhile<\/li>\n<li>Removed useless T_DIE token<\/li>\n<li>Fixed fullcode processing for anonymous classes<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.5.0<\/h2>\n<p class=\"date\">2016-02-01 &#8211; Immortal of Antelope Power<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added support for HTTP API, through &#8216;server&#8217; command.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Fopen modes checked<\/li>\n<li>Redefined default, in class&#8217;s properties<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed situation where echo and print used parenthesis (they don&#8217;t)<\/li>\n<li>Fixed rare but with instanceof and concatenation<\/li>\n<li>Fixed support of integers in Gremlin<\/li>\n<li>Fixed bug in addslashes and and $ protection order<\/li>\n<li>Made Assignations more robust (no un-processed tokens)<\/li>\n<li>Reduced the number of shell_exec usage =&gt; speed up<\/li>\n<li>Finished support for relaxed keyword support in classes (PHP 7)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.4.6<\/h2>\n<p class=\"date\">2016-01-25 &#8211; Immortal of Elk Power<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>New installation script with Vagrant and Ansible (Thanks Alexis!)<\/li>\n<li>Updated documentation<\/li>\n<li>Added a command to remove a project<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Devoops reports has case-insensitive menu sort<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Spot redefined properties, classes and methods.<\/li>\n<li>Spot properties that may be turned private<\/li>\n<li>Fixed special case in Wrong Number Of Arguments<\/li>\n<li>Fixed &#8216;OnePage&#8217; analysis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Finished support for relaxed keywords in classes<\/li>\n<li>Sped up tokenizer by keeping counts of tokens in datastore<\/li>\n<li>Fixed detection of CakePHP<\/li>\n<li>Fixed special case with Labels<\/li>\n<li>Fixed rare case with die() within ternary operator<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.4.5<\/h2>\n<p class=\"date\">2016-01-18 &#8211; Immortal of Tiger Power<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Upgraded documentation<\/li>\n<li>Default command is &#8216;help&#8217;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Better version for FacetedJson report<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>New analysis that spots wrong type of argument in PHP internal functions<\/li>\n<li>Fixed Isset With Constant for PHP 7<\/li>\n<li>Fixed a bug that limited query size during analysis (good for bigger projects)<\/li>\n<li>Include variadic (&#8230;) to Variable Argument Number<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed a bug that blocked tokenizer when a analyzed script generated parse errors.<\/li>\n<li>Added support for bazar, svn.<\/li>\n<li>Fixed a bug in Nsnames at Loading time.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.4.4<\/h2>\n<p class=\"date\">2016-01-11 &#8211; Crown Prince Mo&#8217;ang<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Reviewed OnePage analysis<\/li>\n<li>Dump as now an option to select Recipes<\/li>\n<li>Dump forces line to be integer<\/li>\n<li>Added a task to update a project&#8217;s code (git only ATM)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Better check when opening database for report (more to come)<\/li>\n<li>FacetedJson (and Json) report ignore non-unicode lines<\/li>\n<li>Added &#8216;search&#8217; box to facetedJson<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Switch To Switch suggestions<\/li>\n<li>Unused arguments patch for arguments used in methods<\/li>\n<li>Unused properties doesn&#8217;t mistake function static variable<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>All Nsnames are now build at Loading time<\/li>\n<li>Constants may be calld &#8216;const&#8217;<\/li>\n<li>More relaxed syntax for methods (exit, include, eval&#8230;)<\/li>\n<li>Foreach may use coalesce<\/li>\n<li>Fixed an edge case with Closures in functioncall<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.4.3<\/h2>\n<p class=\"date\">2015-01-04 &#8211; Tuolong<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Copyright year bump<\/li>\n<li>Doctor reports memory_limit and php version consistency<\/li>\n<li>Switched to rmDirRecursive<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Removed old style reporting system<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Fixed fileupload and filesystem directives reports<\/li>\n<li>Added report of Environment variable usage<\/li>\n<li>Added iconv_set_encoding to the list of directive usage<\/li>\n<li>Extension analyzes now takes into account namespaces and traits<\/li>\n<li>Analysiss all have severity and time to fix<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.4.2<\/h2>\n<p class=\"date\">2015-12-22 &#8211; Red Boy<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Published documentation on http:\/\/exakat.readthedocs.org<\/li>\n<li>First version of the faceted report (-format Faceted)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>First version of the faceted report (-format Faceted)<\/li>\n<li>Fixed Dump that actually finishes after some time<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Spot unused arguments<\/li>\n<li>Fixed notInInterface() filter<\/li>\n<li>Upgraded HtmlEntitiesCall<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.4.1<\/h2>\n<p class=\"date\">2015-12-14 &#8211; Azure Lion<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Rebuild the report system, for speed and versatility.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Available format : JSON, Sqlite, XML, Text and HTML (Devoops).<\/li>\n<li>Rules are now part of the documentation.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Upgraded &#8216;Buried assignations&#8217;<\/li>\n<li>Locally Unused also spots properties without visibility (but with definition)<\/li>\n<li>Could be class constant, if the property is used at least once<\/li>\n<li>Better detection of files that are Definitions only (fix at Namespace calls)<\/li>\n<li>++ is now correctly reported as isRead and isWritten in Arguments<\/li>\n<li>Closure&#8217;s use($x) are now reported in both context (calling and called)<\/li>\n<li>Removed usage of &#8216;back&#8217; method, that is blocking at high token counts<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed support for {} and {$ } inside strings<\/li>\n<li>Fixed bug with Typehint, that prevented compilation<\/li>\n<li>Fixed several (rare) edge cases with Sign and Staticproperties.<\/li>\n<li>Fixed detection of closing tags<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.4.0<\/h2>\n<p class=\"date\">2015-12-07 &#8211; Lion Lynx Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Made PHP 7.0 the default (moved to 0.4.0)<\/li>\n<li>Ran unit tests on PHPunit 5.1<\/li>\n<li>Added a background tasks to build report. Will allow for progressive report.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Rewrote the report from scratch. Should be finished next iteration.<\/li>\n<li>New report is working for XML and Text report.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Added support for ext\/pecl_http<\/li>\n<li>Added several classic folders as ignored by default (change this in config.ini)<\/li>\n<li>Create a check for functioncall (and not methods)<\/li>\n<li>Spots join(&#8221;, file())<\/li>\n<li>Safely ignoring some dynamic calls in undefined functions (Thanks Marc Delisle)<\/li>\n<li>Removed ArrayAppend from double assignation<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed a bug when class was auto-referenced.<\/li>\n<li>Fixed detecting Static properties when they are also arrays.<\/li>\n<li>Fixed fatal errors for mal-formed octals<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.12<\/h2>\n<p class=\"date\">2015-11-30 &#8211; Nine Tailed Vixen<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>ProgressBar is now displayed during Analyze phase.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Report list of error messages used in the library<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Omit eval with hardcoded strings<\/li>\n<li>Exclude some index from _SERVER from the report (they are safe)<\/li>\n<li>Exclude php:\/\/* files as hard coded path<\/li>\n<li>Report usage of timestamp to calculate duration<\/li>\n<li>Spots unused traits<\/li>\n<li>Fixed support for big integers<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>First support for relaxed keywords in classes. More to come.<\/li>\n<li>Checked UT on PHP 7 (Soon to become default version)<\/li>\n<li>Fixed version detection in Tokenizer<\/li>\n<li>Fixed fullnspath in Use expression;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.11<\/h2>\n<p class=\"date\">2015-11-16 &#8211; Hu A&#8217;qi<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Report external services files that may be in the repository<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Report nested dirname calls (may be changed in PHP 7)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Better spotting of static loops<\/li>\n<li>Don&#8217;t confuse $globals and $GLOBALS<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Rewrote support for As in classes.<\/li>\n<li>Fixed arguments that were indexed as Void<\/li>\n<li>Trimmed code<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.10<\/h2>\n<p class=\"date\">2015-11-09 &#8211; Silver Horned King<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Centralized call to cypher.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Sped up several analyzes<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Fixed naming bug with reflexion<\/li>\n<li>Support class name in arrays, short syntax<\/li>\n<li>Report Relay Functions<\/li>\n<li>More PHP 7 incompatibilities reports<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Support for 7.1 compilation (dev only)<\/li>\n<li>Added cakephp to external libraries<\/li>\n<li>Fixed parsing bug with static (as property definition)<\/li>\n<li>Fixed &#8216;count&#8217; in sequences from Function<\/li>\n<li>Rewrote Argument detection (when there is no parenthesis)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.9<\/h2>\n<p class=\"date\">2015-11-02 up &#8211; Golden Horned King<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Cleaned code with Exakat<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Refined report about double assignation<\/li>\n<li>Fixed argument counting in Function Definition<\/li>\n<li>Better support of array in Locally Used Properties<\/li>\n<li>Updated Composer database<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed a bug that ignored Blocks<\/li>\n<li>Fixed a rare bug with echo and the following arguments<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.8<\/h2>\n<p class=\"date\">2015-10-26 &#8211; Baihuaxiu<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Cleaned too many display (they go to log now), leaving commandline empty (or -v)<\/li>\n<li>A lot more PHP 7 incompatibilities spotted<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added the list of global variables in the projects (if any)<\/li>\n<li>Fixed reports for PHP 5.2 (they were ignored)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Better handling of composer in unresolved classes<\/li>\n<li>Spot setlocale with string (PHP 7)<\/li>\n<li>Spot string unpacking (PHP 7)<\/li>\n<li>Upgraded static method call, to avoid classes of the same family<\/li>\n<li>Report eval without try\/catch<\/li>\n<li>Report preg_replace with \/e<\/li>\n<li>Fixed report for empty list()<\/li>\n<li>Spot hexadecimal in strings<\/li>\n<li>Report usort (and co) as incompatibilities between PHP 7 and 5<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed edge case with Sign and namespaced function<\/li>\n<li>Added xajax, adodb and gacl as common library<\/li>\n<li>Fixed arguments in short array syntax<\/li>\n<li>Fixed case where [3] was spotted inside a string<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.7<\/h2>\n<p class=\"date\">2015-10-19 &#8211; Yellow Robe Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added and reviewed many UT. More stability.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Fixed the report of the actual version of PHP being used.<\/li>\n<li>Non-run analysis are not marked with a stethoscope<\/li>\n<li>Report now report closures and not the containing method<\/li>\n<li>Removed some dashboard that would generate empty links<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Better spot of blocks inside Alternative syntax<\/li>\n<li>Speed up method spotting<\/li>\n<li>Fixed properties which were mistaken with deep definitions<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed fullcode for Typehint<\/li>\n<li>Removed Ppp and moved it to Visibility<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.6<\/h2>\n<p class=\"date\">2015-10-12 &#8211; White Bone Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Large speed up at Parsing stage, for large projects<\/li>\n<li>Added git informations in Doctor<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Changed processing for Arguments.<\/li>\n<li>Support for more PHP 7 features, including Use Grouping,<\/li>\n<li>Fixed support for ~<\/li>\n<li>Simplified ::class handling<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.5<\/h2>\n<p class=\"date\">2015-10-06 &#8211; Mingyue<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Reported usage of array constants, improving backward compatibility<\/li>\n<li>Checked running on PHP 7<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added Definition annex<\/li>\n<li>Fixed &#8216;version incompatible&#8217; report that was mistaken with &#8216;no result&#8217;<\/li>\n<li>List all directives being modified in the code<\/li>\n<li>List more directives that should be set for production.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Reworked the Themes about compatibility.<\/li>\n<li>Added many tests for PHP 7.0 compatibility<\/li>\n<li>Sped up UsedMethod analysis<\/li>\n<li>Added support for PHP 7 feature : Unicode Escape Sequences, New functions\/classes\/interfaces, Removed Functions,<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Changed processing for Empty PHP code<\/li>\n<li>Support Variable Indirection for both PHP 5 and 7 (depends on exec version)<\/li>\n<li>Avoid ignoring all code when finding External Libraries<\/li>\n<li>Fixed edge cases with declare() when it is conditional.<\/li>\n<li>Support for PHP 7&#8217;s f()()()<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.4<\/h2>\n<p class=\"date\">2015-09-28 up &#8211; Qingfeng<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Added token_limit configuration to avoid running too large project (default is 1 000 000)<\/li>\n<li>Several new tools for internal consistency check.<\/li>\n<li>Removed support for neo-contrib&#8217;s gremlin plugin<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Report libraries that were found and ignored<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Sped up queries that required previous analysis or multiples atoms<\/li>\n<li>Spot global keywords inside loops (perf)<\/li>\n<li>Better spotting of Composer classes<\/li>\n<li>Report double assignations<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for Anonymous classes (PHP 7)<\/li>\n<li>Fixed namespace manipulations (They weren&#8217;t lower case)<\/li>\n<li>Mark constants as fail back globals or local to the namespace<\/li>\n<li>Support Null Coalesce operator (PHP 7)<\/li>\n<li>Fixed rare case for empty strings and noDelimiter<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.3<\/h2>\n<p class=\"date\">2015-09-21 &#8211; Immortal Zhenyuan<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Removed some shell stderr that leaked to the main script<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added the list of used analysis<\/li>\n<li>favicon is now used in the report (Devoops)<\/li>\n<li>Fixed count report for Else<\/li>\n<li>Fixed directive reports for trader, bcmath and ldap.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Rebuild the composer database<\/li>\n<li>Fixed htmlentities analyze<\/li>\n<li>Spot usage of &#8216;substr($s, $p, +\/- 1)&#8217; and recommend &#8216;$s[$p]&#8217;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed Multiplication with instantiation<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.2<\/h2>\n<p class=\"date\">2015-09-14 &#8211; Tiger Vanguard<\/p>\n<ul>\n<li>Report\n<ul>\n<li>Added link back from analysis to its themes.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Useless Returns are now Trait compatible<\/li>\n<li>Optimized Composer validation<\/li>\n<li>Removed IsKnownVendor analyze (replaced by Composer)<\/li>\n<li>Spot inconsistent concatenations (&#8220;$a b&#8221;.$c)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed situation where forgotten white spaces didn&#8217;t have a file<\/li>\n<li>Removed DELETE and S_STRING index<\/li>\n<li>Fixed compatibility with Debian (shell commands)<\/li>\n<li>Added UT for and \/ &amp;&amp; precedence versus =<\/li>\n<li>Fixed identification of empty instructions (Functions \/ Closure have different behaviors)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.1<\/h2>\n<p class=\"date\">2015-09-03 &#8211; Yellow Wind Demon<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Removed usage of Everyman dependencies<\/li>\n<li>Added support for Neo4j Authentication<\/li>\n<li>Added a JobQueue<\/li>\n<li>Cleaned code with exakat itself<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added Dump to SQLITE format for custom manipulations of the results<\/li>\n<li>Added new collection of rules for Calesthenics (dev)<\/li>\n<li>Updated composer database<\/li>\n<li>Now reporting found Composer.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Fixed Compilation spotting<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed an edge case with Sign, when used in a concatenation<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.3.0<\/h2>\n<p class=\"date\">2015-Aug-25 &#8211; Lingxuzi<\/p>\n<ul>\n<li>Architecture\n<ul>\n<li>Moved to Thinkaurelius&#8217;s gremlin plug-in, Neo4j 2.2.4 and Java 8.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Report\n<ul>\n<li>Added a view by File<\/li>\n<li>Added sorting for results (by file and by analyze)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Spot functions whose results should be checked before they are used<\/li>\n<li>Spot breaks\/continue out of a loop<\/li>\n<li>Exports all the results in a dump.sqlite file<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed a minor bug with ::class (messed up the {} counts)<\/li>\n<li>removed dependency to Everyman&#8217;s Neo4j classes.<\/li>\n<li>Added a step that removes big and identifiable libraries in PHP (such as tcpdf, jpgraph, etc..)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.2.5<\/h2>\n<p class=\"date\">2015-Aug-17 &#8211; Scholar in a White Robe<\/p>\n<ul>\n<li>Report\n<ul>\n<li>List the files that are ignored in the annex<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Analysis\n<ul>\n<li>Updated Knowledge Database for memcache, aliases, zlib, standard<\/li>\n<li>Added more directives to Review<\/li>\n<li>Added support for xhprof<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed bug with Else (Not-alternative)<\/li>\n<li>Fixed Sequence creation with If-Then<\/li>\n<li>Yield may be assigned<\/li>\n<li>Removed one Tokenizer&#8217;s operation (filterOut2)<\/li>\n<li>Fixed priorities with Concatenation, Multiplication, Additions<\/li>\n<li>Process Echo and Print separately<\/li>\n<li>Automatically removes common bundled libraries to reduce app size<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.2.4<\/h2>\n<p class=\"date\">2015-06-22 &#8211; Black Wind Demon<\/p>\n<ul>\n<li>Analysis\n<ul>\n<li>Rebuild the composer database<\/li>\n<li>Lots of new extensions supported : ev, libevent, event, php-ast, wikidiff2, proctitle, inotify, ibase, amqp, geoip, output buffering,<\/li>\n<li>Report errors when non-variables are returned by reference<\/li>\n<li>Marked more analyzes for PHP 7<\/li>\n<li>Fixed Unpreprocess structures with split<\/li>\n<li>Upgraded spotting for useless parenthesis<\/li>\n<li>Added a check ++$i vs $i++;<\/li>\n<li>Exclude abstract methods from Variables Used Once<\/li>\n<li>Added new directives<\/li>\n<li>Also check for ASP Tags<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed the fullpath for functions when they are not defined in the code<\/li>\n<li>Upgraded support for Return Type (PHP 7.0+)<\/li>\n<li>error_reporting with -1 is OK<\/li>\n<li>Fixed a precedence problem with &amp; and &amp;&amp;<\/li>\n<li>Refactored Ifthen token to support return type<\/li>\n<li>Added a kill command when cleaning Database<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.2.3<\/h2>\n<p class=\"date\">2015-06-22 &#8211; Techu Shi<\/p>\n<ul>\n<li>Analysis\n<ul>\n<li>Report usage of Return Typehint, and Scalar Typehint<\/li>\n<li>Report usage of classes that used to return null on new<\/li>\n<li>Report useless abstract classes<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Upgraded &#8216;init&#8217; command, to handle various VCS<\/li>\n<li>Added support for Return Typehint<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.2.2<\/h2>\n<p class=\"date\">2015-06-16 &#8211; Xiong Shangjun<\/p>\n<ul>\n<li>Analysis\n<ul>\n<li>Now spots short assignations<\/li>\n<li>More UselessInstructions spotted<\/li>\n<li>Ignore Unset as modified values in loops<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Added support for PHP7 new tokens (T_SPACESHIP, T_COALESCE, T_YIELD_FROM)<\/li>\n<li>Split loading into more .csv files for lighter and more robust queries<\/li>\n<li>Better support for arrays [1,2,3] as functioncall (just like array())<\/li>\n<li>Process tokens by batches of 800<\/li>\n<li>Clean vertex at each queries, not Sequence<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.2.1<\/h2>\n<p class=\"date\">2015-06-02 &#8211; General Yin<\/p>\n<ul>\n<li>Analysis\n<ul>\n<li>sizeOf may have 2 arguments<\/li>\n<li>2 clearPHP link added in documentation<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tokenizer\n<ul>\n<li>Fixed bug with Bitshift and Addition<\/li>\n<li>Fixed bug with Sequence when merging sequences<\/li>\n<li>Fixed bug with String and Addition<\/li>\n<li>Fixed Visibility in Use instruction<\/li>\n<li>Foreach accepts Constants as Source<\/li>\n<li>Fixed special case for nested IfThen<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Version 0.2.0<\/h2>\n<p class=\"date\">2015-05-15 &#8211; Demon of Confusion<\/p>\n<ul>\n<li>First version<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Note : the more recent changelog is here. Version 2.0.0 2019-10-21 &#8211; 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 [&#8230;]\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-13418","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Changelog (up to 2.0) - Exakat<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.exakat.io\/ex\/changelog-2-0\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Changelog (up to 2.0) - Exakat\" \/>\n<meta property=\"og:description\" content=\"Note : the more recent changelog is here. Version 2.0.0 2019-10-21 &#8211; 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 [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.exakat.io\/ex\/changelog-2-0\/\" \/>\n<meta property=\"og:site_name\" content=\"Exakat\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-07T12:57:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.exakat.io\/wp-content\/uploads\/2014\/12\/cropped-cropped-logo-exakat-small.png\" \/>\n\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@exakat\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"87 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.exakat.io\/ex\/changelog-2-0\/\",\"url\":\"https:\/\/www.exakat.io\/ex\/changelog-2-0\/\",\"name\":\"Changelog (up to 2.0) - Exakat\",\"isPartOf\":{\"@id\":\"https:\/\/www.exakat.io\/ex\/en\/#website\"},\"datePublished\":\"2021-10-07T12:27:15+00:00\",\"dateModified\":\"2021-10-07T12:57:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.exakat.io\/ex\/changelog-2-0\/#breadcrumb\"},\"inLanguage\":\"ex-EX\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.exakat.io\/ex\/changelog-2-0\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.exakat.io\/ex\/changelog-2-0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.exakat.io\/ex\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Changelog (up to 2.0)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.exakat.io\/ex\/en\/#website\",\"url\":\"https:\/\/www.exakat.io\/ex\/en\/\",\"name\":\"Exakat\",\"description\":\"Bring Quality to your PHP Projects\",\"publisher\":{\"@id\":\"https:\/\/www.exakat.io\/ex\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.exakat.io\/ex\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ex-EX\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.exakat.io\/ex\/en\/#organization\",\"name\":\"Exakat SAS\",\"alternateName\":\"Exakat\",\"url\":\"https:\/\/www.exakat.io\/ex\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ex-EX\",\"@id\":\"https:\/\/www.exakat.io\/ex\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.exakat.io\/wp-content\/uploads\/2014\/12\/cropped-cropped-logo-exakat-small.png\",\"contentUrl\":\"https:\/\/www.exakat.io\/wp-content\/uploads\/2014\/12\/cropped-cropped-logo-exakat-small.png\",\"width\":512,\"height\":512,\"caption\":\"Exakat SAS\"},\"image\":{\"@id\":\"https:\/\/www.exakat.io\/ex\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/exakat\",\"https:\/\/phpc.social\/@Exakat\",\"https:\/\/bsky.app\/profile\/dseguy.bsky.social\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Changelog (up to 2.0) - Exakat","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.exakat.io\/ex\/changelog-2-0\/","og_locale":"en_US","og_type":"article","og_title":"Changelog (up to 2.0) - Exakat","og_description":"Note : the more recent changelog is here. Version 2.0.0 2019-10-21 &#8211; 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 [...]","og_url":"https:\/\/www.exakat.io\/ex\/changelog-2-0\/","og_site_name":"Exakat","article_modified_time":"2021-10-07T12:57:43+00:00","og_image":[{"width":512,"height":512,"url":"https:\/\/www.exakat.io\/wp-content\/uploads\/2014\/12\/cropped-cropped-logo-exakat-small.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@exakat","twitter_misc":{"Est. reading time":"87 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.exakat.io\/ex\/changelog-2-0\/","url":"https:\/\/www.exakat.io\/ex\/changelog-2-0\/","name":"Changelog (up to 2.0) - Exakat","isPartOf":{"@id":"https:\/\/www.exakat.io\/ex\/en\/#website"},"datePublished":"2021-10-07T12:27:15+00:00","dateModified":"2021-10-07T12:57:43+00:00","breadcrumb":{"@id":"https:\/\/www.exakat.io\/ex\/changelog-2-0\/#breadcrumb"},"inLanguage":"ex-EX","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.exakat.io\/ex\/changelog-2-0\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.exakat.io\/ex\/changelog-2-0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.exakat.io\/ex\/"},{"@type":"ListItem","position":2,"name":"Changelog (up to 2.0)"}]},{"@type":"WebSite","@id":"https:\/\/www.exakat.io\/ex\/en\/#website","url":"https:\/\/www.exakat.io\/ex\/en\/","name":"Exakat","description":"Bring Quality to your PHP Projects","publisher":{"@id":"https:\/\/www.exakat.io\/ex\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.exakat.io\/ex\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ex-EX"},{"@type":"Organization","@id":"https:\/\/www.exakat.io\/ex\/en\/#organization","name":"Exakat SAS","alternateName":"Exakat","url":"https:\/\/www.exakat.io\/ex\/en\/","logo":{"@type":"ImageObject","inLanguage":"ex-EX","@id":"https:\/\/www.exakat.io\/ex\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.exakat.io\/wp-content\/uploads\/2014\/12\/cropped-cropped-logo-exakat-small.png","contentUrl":"https:\/\/www.exakat.io\/wp-content\/uploads\/2014\/12\/cropped-cropped-logo-exakat-small.png","width":512,"height":512,"caption":"Exakat SAS"},"image":{"@id":"https:\/\/www.exakat.io\/ex\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/exakat","https:\/\/phpc.social\/@Exakat","https:\/\/bsky.app\/profile\/dseguy.bsky.social"]}]}},"_links":{"self":[{"href":"https:\/\/www.exakat.io\/ex\/wp-json\/wp\/v2\/pages\/13418","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.exakat.io\/ex\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.exakat.io\/ex\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.exakat.io\/ex\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.exakat.io\/ex\/wp-json\/wp\/v2\/comments?post=13418"}],"version-history":[{"count":5,"href":"https:\/\/www.exakat.io\/ex\/wp-json\/wp\/v2\/pages\/13418\/revisions"}],"predecessor-version":[{"id":13431,"href":"https:\/\/www.exakat.io\/ex\/wp-json\/wp\/v2\/pages\/13418\/revisions\/13431"}],"wp:attachment":[{"href":"https:\/\/www.exakat.io\/ex\/wp-json\/wp\/v2\/media?parent=13418"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}