Replaces our handling of function calls to better separate multiple calls to the same function. Before, calls were separated vaguely based on argument types, with much reuse of analysis units and subsequent merging of result types. Now calls are separated based on the call site location and (optionally) a number of call sites leading to the call (in effect, the call stack).
- adds ArgumentSet for splatting, merging and comparing sets of arguments. This replaces FunctionInfo.CallArgs.
- adds StarArgsSequenceInfo and StarArgsDictionaryInfo for * and ** arguments to allow recursion detection.
- return value and parameter VariableDefs are moved from FunctionInfo to FunctionScope to allow FunctionInfo objects to be reused
- CartesianProductFunctionAnalysisUnit is merged into FunctionAnalysisUnit, which has been moved from AnalysisUnit.cs into FunctionAnalysisUnit.cs
- InterpreterScope is revised to allow more efficient chains, where each call can have a distinct scope to other calls to the same function. It now has an OuterScope property, allowing a reverse linked list (from deepest scope towards global) rather than requiring use of InterpreterScope[].
- NodeScopes ande NodeVariables move from the module to the current scope to allow different instances for different calls
- adds various Add/Get/Remove/TryGet methods to InterpreterScope for variables, node scopes and node variables to allow subclasses to handle these specially.
- adds GetMergedVariables(), GetMergedVariableTypes() and GetAllMergedVariables() to InterpreterScope to allow subclasses to handle these specially. FunctionScope overrides these to return results from all calls to the function.
- adds mergeScopes option to ExpressionEvaluator to optionally retrieve results from all calls rather than the immediate call. This option is primarily used for the IDE rather than the analysis.
Replaces ISet<Namespace> with INamespaceSet to improve performance for type sets.
- includes ObjectComparer and UnionComparer for comparing instances of Namespace.
- removes TypeUnion and TypeUnion.cs since they are no longer necessary with INamespaceSet.
- updates UnionEquals() and UnionHashCode() on namespaces to better manage type merging.
- adds UnionMergeTypes() to namespaces to allow merged types to be different to the two original types.
- adds UnionVariableDef subclass with MakeUnion(), MakeUnionStronger() and MakeUnionStrongerIfMoreThan() to change the comparer used for types.
- adds hard limit to VariableDef to prevent runaway analysis.
- adds optional set check to VariableDef.AddTypes() to detect when types are not being unioned correctly. It is only included with DEBUG defined, and only active when ENABLE_SET_CHECK is set to true (which may be done using the debugger while running).
Updates AnalysisTest:
- remove Test prefix from method names.
- improve options when running AnalysisTest.exe.
- moved various static helper methods into ModuleAnalysisExtensions class.
- adds tests for excess positional and named arguments, isinstance scopes and full standard library analysis.
- changes to use TestUtilities.PythonPaths instead of hardcoded paths in some places.
- reactivates memory leak tests with timed detection of leaks.
Adds AnalysisLimits to centralize storage of tunable parameters.
- removes CrossModuleAnalysisLimit and CrossModulAnalysisLimit from PythonAnalyzer
Adds AnalysisLog to (optionally) write full details of type dependencies while analyzing.
- adds IdDispenser from IronPython to provide numeric IDs for the log
- adds endOfQueueMarker to allow logging statistics for each pass through the entire queue
- adds ParseTrace.py to help analyze the logs
Adds CallableIterator as a built-in type to fix the specialization of iter(callable, sentinel)
- adds support (and documentation) to PythonScraper.py
- changes database version to 20 and updates checked in baseline
Fixes instantiation of user-defined classes to respect __new__ overrides
- adds ObjectBuiltinClassInfo to provide correct handling for object.__new__(cls)
Adds support for isinstance(x, y) or isinstance(x, z) as well as ...and... when creating IsInstanceScopes.
Fixes Parser.ParseStarExpression() incorrectly parsing for a, *b in list_of_tuples:.
Fixes handling of string '+' '*' and '%' operators and sequence '+' '*' 'in' and 'not in' operators.
Fixes nonlocal statements instantiating variables in the wrong scope.
Fixes isinstance types not propagating out of the IsInstanceScope correctly.
Fixes PythonAnalyzer._longType being null for Python 3.x analysis.
Changes SetInfo to derive from SequenceInfo.
Improves Description generation for sequence types.
Simplifies GeneratorInfo.
Changes PythonTypeDatabase.GetLocation to TryGetLocation and updates callers to not return invalid locations.
Adds AnalysisUnit.Tree field to avoid crashing after calling CopyForEval() on an analysis unit that does not contain a ScopeStatement and updated constructors to ensure this field is correctly set
Removes UserDefinedInfo and adds the AnalysisUnit property overrides into the subclasses that need them. Also adds SetAnalysisUnit() to set the value once after construction.
Adds more robust scope checking to OverviewWalker to ensure that scopes are created and popped correctly. (Also fixes those that weren't being created or popped correctly.)
Renames OverviewWalker.CreateVariable() to CreateVariableInDeclaredScope() because that's what it does.
Adds VariableDef.AddDependency() overload for improved performance when the relevant ProjectEntry is known.
Removes unused obsolete functions from ModuleAnalysis.
Fixes typo in PreviewChangesEngine.
Improves SingleDict to provide more complete Dictionary equivalence.
Improves TestUtilities.AssertUtil output and debugger handling.
Makes PythonPaths only return Python installations that are installed.
Makes TestData.Deploy() give better feedback and only deploy all the test data if requested.
Build files have been significantly simplified. Unused settings, keys and certificates are removed.
BuildRelease.ps1 is now more robust and can handle being called from anywhere in the PTVS folder tree. BuildPublicRelease.ps1 has updated paths but is untested.
WiX files are updated for new source and installation paths.
Moved extra prerequisites into \Prerequisites for easier access.
Added PTVS Build Instructions and Project File Format documents.