- Implemented a proper CLI hook
- Unit tests now use RPC+Bonjour so that multiple systems can be combined to run unit tests faster
- Implemented support for properly analyzing skipped blocks, improving the accuracy of results considerably
- Added blacklisting of Alloy support files in coverage reports
- The supported platforms are now pulled from the SDK's manifest, meaning that it properly won't support iPhone on Windows
- Added support for recovering gracefully and quickly from infinite recursion
- Fixed regressions introduced when the CLI was overhauled for 3.2.0
- Fixed a bug where explicitly setting an object's prototype to null caused the code processor to crash
- Fixed a bug where the this pointer was being set to module scope, not global scope, in certain situations
- Updated the unit test harness so that all tests run in global scope, fixing a bunch of unit tests
- Fixed a bug where eval, parseInt, etc had a prototype when they weren't supposed to.
- Fixed a bug where passing a hex string into parseInt was being parsed as decimal
- Fixed a bug with decode/encode URI methods not handling exceptions properly
- Fixed a bug where explicitly passing null or undefined to new Object() improperly threw an exception
- Fixed a bug where the builtin global constructors had their prototype defined twice
- Fixed a bug where strings were not handling numerical property access correctly
- Fixed a bug where the built-in global object's properties enumerable flags weren't being set properly
- Fixed a bug where some properties on the RegExp prototype weren't being added
- Fixed a bug where Object.defineProperties tried to evaluate non-enumerable properties
- Fixed a crash when passing in an invalid module path via configuration files
- Changed infinite loop detection to throw an error, not a warning
- Merged the require-provider and common-globals plugins into the ti-api-provider
- As a result, the code processor now only works with SDK 2.1.0 and newer
- Created a work-around for the code processor exiting before it has printed all of the results to stdout
- The code processor is now a CLI command! Run "titanium analyze --help" for more information
- Added support for Alloy projects
- Added support for the Tizen platform
- Lists of things in the results are now sorted alphabetically to more easily digest
- Reworked how source code information is specified in configuration files to allow for better flexibility
- Added the ability for plugins to elevate their summary into the main summary section
- Fixed the case when a titanium object has an object property (typically a pseduo-type) from getting it's api listed twice in the API usage finder
- Reworked how plugins are initialized so that plugin names are available at initialization time
- Fixed a bug with native methods not creating their contexts properly
- Fixed a crash when calling Function.apply with an unknown value for arguments
- Fixed a crash when calling Array.indexOf and Array.unshift with an unknown this value
- Fixed a bug where running against the iPad platform didn't load iPhone modules
- Added theme support for HTML results page
- Switched the CLI output to use the HTML templates
- Added runtime options and date/time finished to the results page
- Merged unknown-ambiguous-visualizer and unknown-callback-detector plugins
- Cleaned up the config file and output data formats. See the README for details
- Added more debug output
- Changed the default value of executionTimeLimit to 5 minutes
- Added generic cycle detection, of which infinite loops and infinite recursion are sub-classes of
- Added call tracing to visualization plugins
- Moved visualization plugins to enterprise-only
- Fixed a few small bugs uncovered by the upgrade to node 0.10.0
- Updated the README's to contain accurate information about the Code Processor
- Fixed a bug with sending the results message in subprocess before the HTML results were ready
- Reworked invokeMethods=false internally to provide more accurate results by allowing native methods to still be called (console.log, Titanium methods, etc);
- Cleaned up undefined reference error messages
- Lots of small bug fixes
- The plugins sub-command now properly accepts paths
- Syntax errors now have filename/line/column information
- Syntax errors in a module required elsewhere no longer causes the code processor to crash
- Callbacks assigned to properties, such as Ti.Network.HTTPClient.onload, are now processed property
- Ti.Filesystem.ResourcesDirectory now returns something sensible
- Returns inside ambiguous blocks now behave properly
- Fixed a bug with node states being both skipped and visited
- Fixed unknown values short-circuiting expressions
- Fixed setting up the context properly for Ti.include calls
- Modified the Ti API usage finder to report both global api usage numbers and per-file api usage numbers
- Added HTML-bases results pages that studio can use to display results graphically
- Rearchitected unit tests so that they run 30 times faster
- Fixed some more bugs surrounding setting up contexts for deferred methods
- Fixed a few miscellaneous bugs and regressions
- The plugins command now ignores node modules that are not code processor plugins that exist in the plugins search path
- Added support for parsing values from Ti.UI.createXXX constructors
- Added support for Ti.UI.Window.url
- Fixed a bug where deferred analysis of methods wasn't setting up the proper context ** Methods are deferred either because they are a callback (addEventListener/setTimeout/etc) or because they weren't analyzed and processUnvisitedCode is true
- Prevented duplicate errors and warnings from being reported ** Duplicate errors and warnings were being reported when the same line of code causing the error was visited multiple times, thus throwing multiple errors
- Reworked the CLI interface to be much more robust ** The code processor now takes a sub-command, one of 'options', 'plugins', 'analyze', and 'subprocess' ** The 'subprocess' sub-command provides an interactive, structured mechanism for calling the code processor from other programs
- Plugins can now take options ** Options must be specified using a configuration file
- Plugins can now reside anywhere ** To specify plugins in another location, they must be specified in a configuration file
- The ti-api-processor plugin now allows you to specify values for any primitive type in the API ** This can be used to see how an app will react to, say, a specific screen size
- Plugins are now checked to make sure their dependencies are also loaded
- Added --all-plugins and --non-ti-plugins flags to the CLI to load all plugins or all non-Titanium-specific plugins, respectively ** Now, if no plugins are specified, no plugins are loaded
- Fixed a bug where the code processor crashes when encountering a reference to an undeclared variable that is named the same as an Object prototype property
- Added a lot of configuration validation to prevent unexpected behavior/crashes when supplied with bad configuration data
- Fixed property references on Ti objects being ignored
- Added a new option "processUnvisitedCode" ** All .js files that are not processed are processed in an ambiguous context ** All functions that are not invoked are invoked in an ambiguous context ** This option, when combined with invokeMethods=false, makes the code processor work in a more static manner. Processing is much faster, but results are not as accurate
- Removed support for event tags ** They were never used and getting rid of them improved perfomance
- Improved maximum recursion detection/handling to avoid maximum call stack exceeded exceptions
- Lots of small bug fixes dealing with unknown values
- Upgraded from Uglify-JS v1 to v2
- This will allow us to take advantage of source maps in the future
- Analysis maps now annotate the original code, not a serialized AST.
- Comments, whitespace, and overall formatting are preserved.
- Fixed a bug with setting ambiguous contexts properly in function calls
- Fixed a bug in postfix expressions (think x++) where the previous value was unknown not returning the proper value
- Fixed the output with native modules to accurately reflect that they are skipped, not unresolved
- Implemented a new unknown/ambiguous map generation plugin (see [project-dir]/analysis for generated output)
- Added map generation to the analysis coverage plugin (see [project-dir]/analysis for generated output)
- Updated the analysis coverage plugin to report nodes knowingly skipped and files skipped
- Fixed a lot of bugs necessary to get the chapter 11 - 14 unit tests passing
- Fixed module validation so that it displays an intelligible error when a specified module version is missing
- Fixed an issue with properly setting up the context stack for queued functions
- This fixes queued functions with a return statement causing a spurious "return not valid outside of functions" exception
- Unknown callback detector plugin
- Detects instances where an unknown value is passed when a function is expected
- This is useful in determining why a block of code is not being analyzed
- More advanced unit test harness implemented using node cluster
- Paths with spaces are now supported
This is a minor release with slightly tweaked output to aid in debugging, and a new document for tracking the status of unit tests
- Human readable output
- You can still get JSON output with the new -j/--json flag
- Silent output with the -s flag. Only the results are displayed
- -o flag is now required. In practice this flag is necessary for all but the most basic of apps, so I feel that making it required will help users avoid a common pitfall
- Node 0.6 support (not fully tested)
- Added error checking around the 'titanium project' command and making failures more obvious that a 3.0 or newer SDK is not installed