specter/CHANGES.md

313 lines
20 KiB
Markdown
Raw Permalink Normal View History

2022-03-18 17:45:26 +00:00
## 1.1.4
2020-08-16 23:40:59 +00:00
2020-09-17 19:26:28 +00:00
* Add arglist metadata to navs (thanks @phronmophobic)
2020-09-17 19:25:22 +00:00
* Improve before-index performance by 150x on lists and 5x on vectors (thanks @jeff303)
* Bug fix: BEFORE-ELEM, AFTER-ELEM, FIRST, LAST, BEGINNING, and END on subvecs now produce vector type in cljs
2022-03-14 19:46:29 +00:00
* Add compatibility with [babashka](https://babashka.org/)
2020-08-16 23:40:59 +00:00
2019-10-14 03:07:26 +00:00
## 1.1.3 - 2019-10-13
2018-12-03 19:30:28 +00:00
* Better AOT behavior: path functions for inline caching and protpath extensions no longer write eval'd class files. You can force path functions to not override `*compile-files*` by binding `com.rpl.specter.impl/*path-compile-files*` to `true`.
2018-12-03 19:30:28 +00:00
* Bug fix: fix throw-illegal in cljs
2018-11-02 01:40:57 +00:00
## 1.1.2 - 2018-11-01
2018-05-18 17:45:20 +00:00
* Eliminate reflection warning
* Bug fix: Fix inline compiler symbol handling so class references can be used as constants within paths
* Bug fix: Fix handling of subvector paths in cljs
2018-05-18 17:45:20 +00:00
2018-04-23 15:28:23 +00:00
## 1.1.1 - 2018-04-23
* ClojureScript 1.10 introduced a change causing the `walker` navigator to fail to walk records. `ALL` has been updated to operate over `MapEntry` in ClojureScript, fixing the issue.
2018-04-09 18:57:45 +00:00
* Change ns form to comply with cljs.core.specs.alpha (thanks @gnl)
2018-04-21 14:19:05 +00:00
* Remove usage of pprint in cljs so advanced optimization doesn't include it
2018-02-08 11:27:06 +00:00
## 1.1.0 - 2018-01-02
2017-12-04 14:57:43 +00:00
2017-12-04 15:06:43 +00:00
* Add `vtransform` variant of `transform` that takes in collected values as a vector in the first argument rather than spliced into argument list.
* Add `vterminal` that takes in collected vals as vector in first argument rather than spliced into argument list.
2017-12-21 18:15:22 +00:00
* Add `compact` navigator. After each step of navigation of its subpath, `compact` removes the collection if it's empty.
* Change `terminal` to be a no-op on select codepath
* Bug fix: `subselect`/`filterer` removes first matched element instead of setting to nil when transformed to empty sequence
2017-12-04 14:57:43 +00:00
2018-02-08 11:27:06 +00:00
## 1.0.5 - 2017-11-16
2017-10-19 15:29:41 +00:00
2017-10-20 15:06:25 +00:00
* Add `regex-nav` navigator for regexes, which navigates to every match in a string and supports replacement with a new substring (thanks @mwfogleman)
* Regexes implicitly convert to `regex-nav` in paths
* Strings, numbers, booleans, characters, and symbols implicitly convert to `keypath` in paths
2017-10-19 15:29:41 +00:00
2018-02-08 11:27:06 +00:00
## 1.0.4 - 2017-10-17
2017-08-15 05:32:43 +00:00
2017-08-16 11:28:05 +00:00
* Add `indexed-vals` navigator, a variant of `INDEXED-VALS` that allows for a customized start index.
2017-08-15 05:32:43 +00:00
* Bug fix: Fix `INDEXED-VALS` invalidly overwriting elements in some transforms involving multiple index changes
2018-02-08 11:27:06 +00:00
## 1.0.3 - 2017-08-14
2017-06-12 16:03:34 +00:00
2017-07-24 14:32:14 +00:00
* Added `before-index` navigator for inserting a single element into a sequence.
* Added `index-nav` navigator for moving an element in a sequence to a new index, shifting other elements in the process.
2017-08-14 10:48:54 +00:00
* Added `INDEXED-VALS` navigator for navigating to every element of a sequence as [index elem] pair. Transform on index portion works the same as `index-nav`.
2017-06-27 12:26:15 +00:00
* Workaround for ClojureScript regression that causes warnings for record fields named "var" or other reserved names
2017-06-27 12:23:11 +00:00
2018-02-08 11:27:06 +00:00
## 1.0.2 - 2017-06-12
* Added `pred=`, `pred<`, `pred>`, `pred<=`, `pred>=` for filtering using common comparisons
2017-05-05 22:41:46 +00:00
* Add `map-key` navigator
* Add `set-elem` navigator
* Add `ALL-WITH-META` navigator
* `walker` and `codewalker` can now be used with `NONE` to remove elements
2017-06-03 22:24:11 +00:00
* Improve `walker` performance by 70% by replacing clojure.walk implementation with custom recursive path
* Extend `ALL` to work on records (navigate to key/value pairs)
* Add ability to declare a function for end index of `srange-dynamic` that takes in the result of the start index fn. Use `end-fn` macro to declare this function (takes in 2 args of [collection, start-index]). Functions defined with normal mechanisms (e.g. `fn`) will still only take in the collection as an argument.
2017-06-07 21:54:56 +00:00
* Workaround for ClojureScript bug that emits warnings for vars named the same as a private var in cljs.core (in this case `NONE`, added as private var to cljs.core with 1.9.562)
2017-06-01 01:01:31 +00:00
* For ALL transforms on maps, interpret transformed key/value pair of size < 2 as removal
2017-05-08 22:49:41 +00:00
* Bug fix: Fix incorrect inline compilation when a dynamic function invocation is nested in a data structure within a parameter to a navigator builder
2018-02-08 11:27:06 +00:00
## 1.0.1 - 2017-04-17
2017-03-15 15:53:16 +00:00
* `subselect`/`filterer` can remove entries in source by transforming to a smaller sequence
2017-04-03 17:46:08 +00:00
* Add `satisfies-protpath?`
2017-03-15 15:53:16 +00:00
* Inline cache vars are marked private so as not to interfere with tooling
* Improve performance of `ALL` transform on lists by 20%
2017-04-15 19:46:42 +00:00
* Bug fix: Using `pred` no longer inserts unnecessary `coerce-nav` call at callsite
2017-03-22 17:31:28 +00:00
* Bug fix: Dynamic navs in argument position to another nav now properly expanded and compiled
2017-04-01 08:29:18 +00:00
* Bug fix: Dynamic parameters nested inside data structures as arguments are now compiled correctly by inline compiler
2017-03-15 15:53:16 +00:00
2018-02-08 11:27:06 +00:00
## 1.0.0 - 2017-03-01
2016-12-26 17:56:40 +00:00
* Transform to `com.rpl.specter/NONE` to remove elements from data structures. Works with `keypath` (for both sequences and maps), `must`, `nthpath`, `ALL`, `MAP-VALS`, `FIRST`, and `LAST`
2017-02-13 02:13:08 +00:00
* Add `nthpath` navigator
* Add `with-fresh-collected` higher order navigator
2017-02-12 16:39:41 +00:00
* Added `traverse-all` which returns a transducer that traverses over all elements matching the given path.
2017-02-12 16:44:36 +00:00
* `select-first` and `select-any` now avoid traversal beyond the first value matched by the path (like when using `ALL`), so they are faster now for those use cases.
2017-02-28 20:55:54 +00:00
* Add `MAP-KEYS` navigator that's more efficient than `[ALL FIRST]`
2017-02-14 13:48:36 +00:00
* Add `NAME` and `NAMESPACE` navigators
2017-02-16 20:35:20 +00:00
* Extend `srange`, `BEGINNING`, `END` to work on strings. Navigates to a substring.
* Extend `FIRST` and `LAST` to work on strings. Navigates to a character.
2017-02-16 04:08:49 +00:00
* Add `BEFORE-ELEM` and `AFTER-ELEM` for prepending or appending a single element to a sequence
* Add `NONE-ELEM` to efficiently add a single element to a set
2017-02-13 02:03:16 +00:00
* Improved `ALL` performance for PersistentHashSet
2017-02-13 02:13:08 +00:00
* Dynamic navs automatically compile sequence returns if completely static
* Eliminate reflection warnings for clj (thanks @mpenet)
2017-02-14 13:48:36 +00:00
* Bug fix: Collected vals now properly passed to subpaths for `if-path`, `selected?`, and `not-selected?`
2017-02-17 17:08:32 +00:00
* Bug fix: `LAST`, `FIRST`, `BEGINNING`, and `END` properly transform subvector types to a vector type
2016-12-26 17:56:40 +00:00
2018-02-08 11:27:06 +00:00
## 0.13.2 - 2016-12-21
2016-11-07 16:28:59 +00:00
2016-11-09 11:20:38 +00:00
* Bug fix: Fix race condition relating to retrieving path from cache and AOT compilation
2016-11-18 21:24:34 +00:00
* Bug fix: LAST no longer converts lists to vectors
2016-12-03 16:05:06 +00:00
* Bug fix: Workaround issue with aot + uberjar
2016-11-09 11:20:38 +00:00
2018-02-08 11:27:06 +00:00
## 0.13.1 - 2016-11-07
2016-09-07 11:54:54 +00:00
* Remove any? in com.rpl.specter.impl to avoid conflict with Clojure 1.9
* Enhanced dynamic navigators to continue expanding if any other dynamic navs are returned
* Added `eachnav` to turn any 1-argument navigator into a navigator that accepts any number of arguments, navigating by each argument in order
* `keypath` and `must` enhanced to take in multiple arguments for concisely specifying multiple steps
2016-11-07 12:47:36 +00:00
* Added `traversed`
2016-10-02 11:48:53 +00:00
* Bug fix: Fix regression from 0.13.0 where [ALL FIRST] on a PersistentArrayMap that created duplicate keys would create an invalid PersistentArrayMap
2016-10-14 13:54:40 +00:00
* Bug fix: Fix problems with multi-path and if-path in latest versions of ClojureScript
2016-10-29 20:03:39 +00:00
* Bug fix: Inline compiler no longer flattens and changes the type of sequential params
2016-09-07 11:54:54 +00:00
2018-02-08 11:27:06 +00:00
## 0.13.0 - 2016-09-06
2016-08-06 04:55:29 +00:00
2016-09-06 14:21:56 +00:00
* BREAKING CHANGE: `com.rpl.specter.macros` namespace removed and all macros moved into core `com.rpl.specter` namespace
2016-09-02 03:37:36 +00:00
* BREAKING CHANGE: Core protocol `Navigator` changed to `RichNavigator` and functions now have an extra argument.
2016-09-06 14:20:43 +00:00
* BREAKING CHANGE: All navigators must be defined with `defnav` and its variations from `com.rpl.specter`. The core protocols may no longer be extended. Existing types can be turned into navigators with the new `IndirectNav` protocol.
2016-09-02 13:09:41 +00:00
* BREAKING CHANGE: Removed `fixed-pathed-nav` and `variable-pathed-nav` and replaced with much more generic `late-bound-nav`. `late-bound-nav` can have normal values be late-bound parameterized (not just paths). Use `late-path` function to indicate which parameters are paths. If all bindings given to `late-bound-nav` are static, the navigator will be resolved and cached immediately. See `transformed` and `selected?` for examples.
2016-09-02 13:09:16 +00:00
* BREAKING CHANGE: Paths can no longer be compiled without their parameters. Instead, use the `path` macro to handle the parameterization.
2016-09-02 03:37:36 +00:00
* BREAKING CHANGE: Parameterized protocol paths now work differently since paths cannot be specified without their parameters. Instead, use the parameter names from the declaration in the extension to specify where the parameters should go. For example:
2016-09-05 11:51:31 +00:00
```clojure
(defprotocolpath MyProtPath [a])
(extend-protocolpath MyProtPath
clojure.lang.PersistentArrayMap
(must a))
```
2016-09-02 13:09:16 +00:00
* BREAKING CHANGE: Removed `defpathedfn` and replaced with much more generic `defdynamicnav`. `defdynamicnav` works similar to a macro and takes as input the parameters seen during inline caching. Use `dynamic-param?` to distinguish which parameters are statically specified and which are dynamic. `defdynamicnav` is typically used in conjunction with `late-bound-nav`  see implementation of `selected?` for an example.
* Inline caching now works with locals, dynamic vars, and special forms used in the nav position. When resolved at runtime, those values will be coerced to a navigator if a vector or implicit nav (e.g. keyword). Can hint with ^:direct-nav metadata to remove this coercion if know for sure those values will be implementations of `RichNavigator` interface.
2016-09-02 03:37:36 +00:00
* Redesigned internals so navigators use interface dispatch rather than storing transform/selection functions as separate fields.
* Added `local-declarepath` to assist in making local recursive or mutually recursive paths. Use with `providepath`.
* Added `recursive-path` to assist in making recursive paths, both parameterized and unparameterized. Example:
2016-09-05 11:51:31 +00:00
```clojure
(let [tree-walker (recursive-path [] p (if-path vector? [ALL p] STAY))]
(select tree-walker [1 [2 [3 4] 5] [[6]]]))
```
2016-09-02 13:09:16 +00:00
* Significantly improved performance of paths that use dynamic parameters.
2016-08-06 04:55:29 +00:00
* Inline factoring now parameterizes navigators immediately when all parameters are constants (rather than factoring it to use late-bound parameterization). This creates leaner, faster code.
2016-08-06 04:57:04 +00:00
* Added `IndirectNav` protocol for turning a value type into a navigator.
2016-09-02 13:09:16 +00:00
* Removed `must-cache-paths!`. No longer relevant since all paths can now be compiled and cached.
2016-09-02 13:09:41 +00:00
* Added `with-inline-debug` macro that prints information about the code being analyzed and produced by the inline compiler / cacher.
2016-08-07 02:20:53 +00:00
* Switched codebase from cljx to cljc
2016-08-09 16:29:25 +00:00
* Improved performance of ALL and MAP-VALS on PersistentArrayMap by about 2x
2016-08-17 13:44:20 +00:00
* `defnav` now generates helper functions for every method. For example, `keypath` now has helpers `keypath-select*` and `keypath-transform*`. These functions take parameters `[key structure next-fn]`
2016-08-09 16:29:25 +00:00
* Bug fix: ALL and MAP-VALS transforms on PersistentArrayMap above the threshold now output PersistentArrayMap instead of PersistentHashMap
2016-08-06 04:55:29 +00:00
2018-02-08 11:27:06 +00:00
## 0.12.0 - 2016-08-05
2016-06-07 22:18:44 +00:00
2016-08-06 04:55:29 +00:00
* BREAKING CHANGE: Changed semantics of `Navigator` protocol `select*` in order to enable very large performance improvements to `select`, `select-one`, `select-first`, and `select-one!`. Custom navigators will need to be updated to conform to the new required semantics. Codebases that do not use custom navigators do not require any changes. See the docstring on the protocol for the details.
2016-06-08 00:25:39 +00:00
* Added `select-any` operation which selects a single element navigated to by the path. Which element returned is undefined. If no elements are navigated to, returns `com.rpl.specter/NONE`. This is the fastest selection operation.
2016-06-07 22:18:44 +00:00
* Added `selected-any?` operation that returns true if any element is navigated to.
2016-06-13 18:52:35 +00:00
* Added `traverse` operation which returns a reducible object of all the elements navigated to by the path. Very efficient.
2016-06-23 16:40:39 +00:00
* Added `multi-transform` operation which can be used to perform multiple transformations in a single traversal. Much more efficient than doing the
transformations with `transform` one after another when the transformations share a lot of navigation. `multi-transform` is used in conjunction with `terminal` and `terminal-val` see the docstring for details.
2016-06-07 22:18:44 +00:00
* Huge performance improvements to `select`, `select-one`, `select-first`, and `select-one!`
2016-06-23 16:36:36 +00:00
* Huge performance improvement to `multi-path`
2016-06-08 17:35:29 +00:00
* Added META navigator (thanks @aengelberg)
* Added DISPENSE navigator to drop all collected values for subsequent navigation
2016-06-13 21:23:40 +00:00
* Added `collected?` macro to create a filter function which operates on the collected values.
2016-06-15 16:46:33 +00:00
* Error now thrown if a pathedfn (like filterer) is used without being parameterized
2016-06-15 21:20:45 +00:00
* Performance improvement for ALL and MAP-VALS on small maps for Clojure by leveraging IMapIterable interface
2016-06-16 13:59:29 +00:00
* Added low-level `richnav` macro for creating navigators with full flexibility
* Bug fix: multi-path and if-path now work properly with value collection
2016-06-11 13:51:52 +00:00
* Bug fix: END, BEGINNING, FIRST, LAST, and MAP-VALS now work properly on nil
2016-06-21 22:38:00 +00:00
* Bug fix: ALL and MAP-VALS now maintain the comparator of sorted maps
* Bug fix: Using value collection along with `setval` no longer throws exception
2016-06-27 21:32:02 +00:00
* Bug fix: Fix error when trying to use Specter along with AOT compilation
2016-06-07 22:18:44 +00:00
2018-02-08 11:27:06 +00:00
## 0.11.2 - 2016-06-09
2016-06-09 12:53:53 +00:00
* Renamed com.rpl.specter.transient namespace to com.rpl.specter.transients to eliminate ClojureScript compiler warning about reserved keyword
2016-06-09 12:52:35 +00:00
* Eliminated compiler warnings for ClojureScript version
2016-06-09 12:06:52 +00:00
2018-02-08 11:27:06 +00:00
## 0.11.1 - 2016-06-08
2016-06-05 05:18:40 +00:00
* More efficient inline caching for Clojure version, benchmarks show inline caching within 5% of manually precompiled code for all cases
2016-06-08 14:24:04 +00:00
* Added navigators for transients in com.rpl.specter.transient namespace (thanks @aengelberg)
* Huge performance improvement for ALL transform on maps and vectors
2016-06-01 16:27:22 +00:00
* Significant performance improvements for FIRST/LAST for vectors
2016-06-05 02:57:56 +00:00
* Huge performance improvements for `if-path`, `cond-path`, `selected?`, and `not-selected?`, especially for condition path containing only static functions
2016-06-07 20:07:01 +00:00
* Huge performance improvement for `END` on vectors
2016-06-06 20:10:47 +00:00
* Added specialized MAP-VALS navigator that is twice as fast as using [ALL LAST]
2016-06-02 06:45:02 +00:00
* Dropped support for Clojurescript below v1.7.10
2016-08-06 04:55:29 +00:00
* Added :notpath metadata to signify pathedfn arguments that should be treated as regular arguments during inline factoring. If one of these arguments is not a static var reference or non-collection value, the path will not factor.
2016-06-03 20:25:27 +00:00
* Bug fix: `transformed` transform-fn no longer factors into `pred` when an anonymous function during inline factoring
2016-06-06 12:16:45 +00:00
* Bug fix: Fixed nil->val to not replace the val on `false`
2016-06-08 13:40:53 +00:00
* Bug fix: Eliminate reflection when using primitive parameters in an inline cached path
2016-06-01 03:05:53 +00:00
2018-02-08 11:27:06 +00:00
## 0.11.0 - 2016-05-31
2016-05-23 19:33:15 +00:00
* New `path` macro does intelligent inline caching of the provided path. The path is factored into a static portion and into params which may change on each usage of the path (e.g. local parameters). The static part is factored and compiled on the first run-through, and then re-used for all subsequent invocations. As an example, `[ALL (keypath k)]` is factored into `[ALL keypath]`, which is compiled and cached, and `[k]`, which is provided on each execution. If it is not possible to precompile the path (e.g. [ALL some-local-variable]), nothing is cached and the path will be compiled on each run-through.
2016-05-26 20:54:55 +00:00
* BREAKING CHANGE: all `select/transform/setval/replace-in` functions changed to macros and moved to com.rpl.specter.macros namespace. The new macros now automatically wrap the provided path in `path` to enable inline caching. Expect up to a 100x performance improvement without using explicit precompilation, and to be within 2% to 15% of the performance of explicitly precompiled usage.
* Added `select*/transform*/setval*/replace-in*/etc.` functions that have the same functionality as the old `select/transform/setval/replace-in` functions.
* Added `must-cache-paths!` function to throw an error if it is not possible to factor a path into a static portion and dynamic parameters.
* BREAKING CHANGE: `defpath` renamed to `defnav`
* BREAKING CHANGE: `path` renamed to `nav`
* BREAKING CHANGE: `fixed-pathed-path` and `variable-pathed-path` renamed to `fixed-pathed-nav` and `variabled-pathed-nav`
2016-05-23 19:33:15 +00:00
* Added `must` navigator to navigate to a key if and only if it exists in the structure
2016-06-06 16:34:05 +00:00
* Added `continuous-subseqs` navigator
2016-05-23 19:33:15 +00:00
* Added `ATOM` navigator (thanks @rakeshp)
* Added "navigator constructors" that can be defined via `defnavconstructor`. These allow defining a flexible function to parameterize a defnav, and the function integrates with inline caching for high performance.
2016-05-05 18:24:57 +00:00
2016-05-28 17:57:30 +00:00
2018-02-08 11:27:06 +00:00
## 0.10.0 - 2016-04-26
2016-04-18 01:00:58 +00:00
* Make codebase bootstrap cljs compatible
2016-04-18 16:20:20 +00:00
* Remove usage of reducers in cljs version in favor of transducers (thanks @StephenRudolph)
* ALL now maintains type of queues (thanks @StephenRudolph)
2016-04-18 18:26:11 +00:00
* Added `parser` path (thanks @thomasathorne)
2016-04-20 00:41:00 +00:00
* Added `submap` path (thanks @bfabry)
2016-04-21 01:59:20 +00:00
* Added `subselect` path (thanks @aengelberg)
2016-04-21 20:34:58 +00:00
* Fix filterer to maintain the type of the input sequence in transforms
2016-04-24 15:11:50 +00:00
* Integrated zipper navigation into com.rpl.specter.zipper namespace
2016-04-18 01:00:58 +00:00
2018-02-08 11:27:06 +00:00
## 0.9.3 - 2016-04-15
2016-04-16 00:21:28 +00:00
* Change clojure/clojurescript to provided dependencies
* ALL on maps auto-coerces MapEntry to vector, enabling smoother transformation of map keys
2016-01-30 20:13:28 +00:00
* declarepath can now be parameterized
2016-01-31 18:02:00 +00:00
* Added params-reset which calls its path with the params index walked back by the number of params needed by its path. This enables recursive parameterized paths
* Added convenience syntax for defprotocolpath with no params, e.g. (defprotocolpath foo)
2016-02-14 18:35:39 +00:00
* Rename VOID to STOP
2018-02-08 11:27:06 +00:00
## 0.9.2 - 2016-01-26
2016-01-10 15:35:47 +00:00
* Added VOID selector which navigates nowhere
* Better syntax checking for defpath
2016-01-11 15:25:03 +00:00
* Fixed bug in protocol paths (#48)
2016-01-13 06:46:26 +00:00
* Protocol paths now error when extension has invalid number of needed parameters
* Fix replace-in to work with value collection
2016-01-14 18:15:54 +00:00
* Added STAY selector
* Added stay-then-continue and continue-then-stay selectors which enable pre-order/post-order traversals
2016-01-14 22:36:49 +00:00
* Added declarepath and providepath, which enable arbitrary recursive or mutually recursive paths
2016-01-15 15:29:35 +00:00
* Renamed paramspath to path
2016-01-10 15:35:47 +00:00
2018-02-08 11:27:06 +00:00
## 0.9.1 - 2016-01-05
2015-12-16 06:05:27 +00:00
* Fixed reflection in protocol path code
2016-08-06 04:55:29 +00:00
* Optimized late-bound parameterization for JVM implementation by directly creating the object array rather than use object-array
2016-01-05 13:57:55 +00:00
* Incorrectly specified function names in defpath will now throw error
2015-12-16 06:05:27 +00:00
2018-02-08 11:27:06 +00:00
## 0.9.0 - 2015-12-12
2015-11-03 15:52:17 +00:00
* Fixed bug where comp-paths wouldn't work on lazy seqs in cljs
2015-12-12 17:38:28 +00:00
* Renamed defparamspath and defparamscollector to defpath and defcollector
* For Clojure version only, implemented protocol paths (see #38)
2015-11-03 15:52:17 +00:00
2018-02-08 11:27:06 +00:00
## 0.8.0 - 2015-10-10
2015-10-10 15:21:13 +00:00
* Now compatible with Clojure 1.6.0 and 1.5.1 by switching build to cljx (thanks @MerelyAPseudonym)
2015-10-10 15:56:02 +00:00
* Added subset selector (like srange but for sets)
2015-10-11 14:46:26 +00:00
* Added nil->val, NIL->SET, NIL->LIST, and NIL->VECTOR selectors to make it easier to manipulate maps (e.g. (setval [:akey NIL->VECTOR END] [:a :b] amap) to append that vector into that value for the map, even if nothing was at that value at the start)
2015-10-10 15:21:13 +00:00
2018-02-08 11:27:06 +00:00
## 0.7.1 - 2015-09-24
2015-09-12 18:16:35 +00:00
* view can now be late-bound parameterized
* Added a late-bound parameterized version of using a function as a selector called "pred"
* Added paramsfn helper macro for defining filter functions that take late-bound parameters
* walker and codewalker can now be late-bound parameterized
2015-09-12 18:16:35 +00:00
2018-02-08 11:27:06 +00:00
## 0.7.0 - 2015-09-11
2015-12-16 06:06:36 +00:00
* Added late-bound parameterization feature: allows selectors that require params to be precompiled without the parameters, and the parameters are supplied later in bulk. This effectively enables Specter to be used in any situation with very high performance.
2015-09-11 21:36:16 +00:00
* Converted Specter built-in selectors to use late-bound parameterization when appropriate
* ALL, FIRST, and LAST are now precompiled
2018-02-08 11:27:06 +00:00
## 0.6.2 - 2015-07-03
2015-07-02 21:25:00 +00:00
* Added not-selected? selector
* Added transformed selector
2016-08-06 04:55:29 +00:00
* Sped up CLJS implementation for comp-paths by replacing obj-extends? call with satisfies?
2015-07-03 21:46:23 +00:00
* Fixed CLJS implementation to extend core types appropriately
* Used not-native hint to enable direct method invocation to speed up CLJS implementation
2015-07-02 21:25:00 +00:00
2018-02-08 11:27:06 +00:00
## 0.6.1 - 2015-07-01
2015-07-01 14:36:21 +00:00
* Huge speedup to ClojureScript implementation by optimizing field access
2018-02-08 11:27:06 +00:00
## 0.6.0 - 2015-07-01
2015-07-01 00:09:09 +00:00
* Added ClojureScript compatibility
2018-02-08 11:27:06 +00:00
## 0.5.7 - 2015-06-30
2015-06-30 03:44:18 +00:00
* Fix bug in select-one! which wouldn't allow nil result
2018-02-08 11:27:06 +00:00
## 0.5.6 - 2015-06-29
* Add multi-path implementation
* change FIRST/LAST to select nothing on an empty sequence
2015-06-29 22:31:03 +00:00
* Allow sets to be used directly as selectors (acts as filter)
2018-02-08 11:27:06 +00:00
## 0.5.5 - 2015-06-22
2015-06-22 18:38:34 +00:00
* Change filterer to accept a selector (that acts like selected? to determine whether or not to select value)
2018-02-08 11:27:06 +00:00
## 0.5.4 - 2015-06-19
2015-06-19 18:19:16 +00:00
* Change cond-path and if-path to take in a selector for conditionals (same idea as selected?)
2018-02-08 11:27:06 +00:00
## 0.5.3 - 2015-06-18
2015-06-18 04:56:17 +00:00
* Added cond-path and if-path selectors for choosing paths depending on value of structure at that location
2018-02-08 11:27:06 +00:00
## 0.5.2 - 2015-06-01
2015-06-01 18:22:44 +00:00
* Fix error for selectors with one element defined using comp-paths, e.g. [:a (comp-paths :b)]
2018-02-08 11:27:06 +00:00
## 0.5.1 - 2015-05-31
2015-05-31 12:54:30 +00:00
* Added putval for adding external values to collected values list
* nil is now interpreted as identity selector
* empty selector is now interpreted as identity selector instead of producing error