Package: globals
================

Version: 0.11.0 [2018-01-09]

NEW FEATURES:

 o Now findGlobals() identifies 'x' as a global variable in 'x <- x + 1'
   and likewise for x + 1 -> x.  Note that ditto using `<<-` and `->>`
   was already identifying 'x' as a global.

BUG FIXES:

 o findGlobals(..., trace = TRUE) now outputs only to standard error.
   Previously, some of the output went to standard output.


Version: 0.10.3 [2017-10-12]

BUG FIXES:

 o globalsOf(..., recursive = TRUE) would result in "Error in match.fun(FUN) :
   node stack overflow" if one of the globals identified was a function that
   called itself recursively (either directly or indirectly).


Version: 0.10.2 [2017-08-08]

BUG FIXES:

  o walkAST() could produce error "Cannot walk expression. Unknown object
    type '...'" for objects of type 'environment'.


Version: 0.10.1 [2017-07-01]

BUG FIXES:

  o walkAST() could produce error "Cannot walk expression. Unknown object
    type '...'" for objects of type 'list', 'expression' and 'S4'.


Version: 0.10.0 [2017-04-16]

NEW FEATURES:

  o Globals that are part of a formula are now identified.

  o findGlobals(..., trace = TRUE) will now show low-level parse information
    as the abstract syntax tree (AST) is walked.

SOFTWARE QUALITY:

  o Enabled more internal sanity checks.
  
BUG FIXES:

  o walkAST() could produce error "Cannot walk expression. Unknown object
    type 'nnn'" for expressions of type 'builtin', 'closure' and 'special'.
    

Version: 0.9.0 [2017-03-09]

NEW FEATURES:

  o Added option 'globals.debug', which when TRUE enables debugging output.
  
BUG FIXES:

  o globalsOf(..., recursive = TRUE) would in some cases scan an incorrect
    subset of already identified globals.

  o globalsOf(..., recursive = TRUE) failed to skip objects part of package
    namespaces that where defined via a local() statement.


Version: 0.8.0 [2017-01-14]

NEW FEATURES:

  o globalsOf() identifies also globals in locally defined functions.
    This can be disabled with argument recursive = FALSE.

  o findGlobals() now takes both closures (functions) and expressions.
  

Version: 0.7.2 [2016-12-28]

BUG FIXES:

  o c(x, list()) where x is a Globals object would give an error reporting
    that the list does not have named elements.
  
  
Version: 0.7.1 [2016-10-13]

NEW FEATURES:

  o Globals() and as.Globals() now accepts an empty list as input as well.

BUG FIXES:

  o walkAST(quote( function(x=NULL) 0 )) would give a sanity check error due
    to the NULL argument.  Thank you GitHub user billy34 for reporting on this.
  
  
Version: 0.7.0 [2016-09-08]

NEW FEATURES:

  o Added walkAST(), which can be used to tweak expressions.

  o Added globalsByName() for locating and retrieving a set of known global
    variables.

  o Added c(), $<-(), names(), unique() for Globals objects.

  o Improved as.Globals() for lists.
  
  
Version: 0.6.1 [2016-01-31]

NEW FEATURES:

  o Now the error message of globalsOf(..., mustExist=TRUE) when it fails to
    locate a global also gives information on the expression that is
    problematic.

BUG FIXES:

  o cleanup() for Globals did not cleanup functions in core package
    environments named 'package:<name>'.
  
  
Version: 0.6.0 [2015-12-12]

NEW FEATURES:

  o findGlobals() is updated to handle the case where a local variable is
    overwriting a global one with the same name, e.g. { a <- b; b <- 1 }.
    Now 'b' is correctly identified as a global object.  Previously it would
    have been missed.  For backward compatibility, the previous behavior can
    be obtained using argument method="conservative".
  
  
Version: 0.5.0 [2015-10-13]

NEW FEATURES:

  o globalsOf() now returns attribute 'where' specifying where each global
    object is located.

BUG FIXES:

  o cleanup() now only drops objects that are *located* in one of the "base"
    packages; previously it would also drop copies of such objects, e.g.
    FUN <- base::sample.
  
  
Version: 0.4.1 [2015-10-05]

BUG FIXES:

  o globalsOf() failed to return global variables with value NULL.  They were
    identified but silently dropped.
  
  
Version: 0.4.0 [2015-09-12]

NEW FEATURES:

  o findGlobals() and globalsOf() gained argument 'dotdotdot'.

  
Version: 0.3.1 [2015-06-10]

  o More test coverage.
  
  
Version: 0.3.0 [2015-06-08]

NEW FEATURES:

  o Renamed getGlobals() to globalsOf().
  
  
Version: 0.2.3 [2015-06-08]

NEW FEATURES:

  o Added [() for Globals.

  o findGlobals() and getGlobals() gained argument 'substitute'.

  o Added cleanup(..., method="internals").
  
  
Version: 0.2.2 [2015-05-20]

NEW FEATURES:

  o Added Globals class with methods cleanup() and packagesOf().
    Added as.Globals() to coerce lists to Globals objects.
  
  
Version: 0.2.1 [2015-05-20]

NEW FEATURES:

  o getGlobals() gained argument 'mustExist' for controlling whether to give an
    error when the corresponding object for an identified global cannot be
    found or to silently drop the missing global.

  o findGlobals() and getGlobals() gained argument 'method' for controlling
    whether a "conservative" or a "liberal" algorithm for identifying true
    globals should be used.
  
  
Version: 0.2.0 [2015-05-19]

  o Moved globals function from an in-house package to this package.
  
  
Version: 0.1.0 [2015-02-07]

  o Created.
