1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-13 17:57:37 +01:00
Commit Graph

1265 Commits

Author SHA1 Message Date
Matthew Brown
8c71da75af Add fix to more places 2020-01-06 09:47:14 -05:00
Matthew Brown
a212375343 Fix possibly bad property fetch 2020-01-06 09:21:42 -05:00
Matthew Brown
137650fe6f Fix #2556 - don’t remap params if they’ve already been remapped once 2020-01-06 09:18:16 -05:00
Matthew Brown
4888ae67a6 Fix #2558 - remove wedge clauses when they’re the only thing left 2020-01-06 08:56:50 -05:00
Matthew Brown
4e85967184 Fix tests 2020-01-05 21:58:18 -05:00
Matthew Brown
867511d7fd Use more specific error magic properties 2020-01-05 21:07:26 -05:00
Matthew Brown
f48ecda295 Fix ref 2020-01-05 18:53:24 -05:00
Matthew Brown
2fb5a9d326 Few small improvements 2020-01-05 18:37:07 -05:00
Matthew Brown
d4ef5c2a4a Fix read flags 2020-01-05 17:20:09 -05:00
SignpostMarv
fbf66ba7f6 Typecast bool to int (#2550)
* adding specific checks for typecasting booleans, re: vimeo/psalm#2548

* satisfying phpcs

* amend check to use psalm types rather than php-parser types

* implementing tests for typecasting bools to int

* satisfying phpcs
2020-01-04 16:36:19 -05:00
Matthew Brown
37810b5a44 Fix #2552 - add parse error when encountering empty array values 2020-01-04 16:33:02 -05:00
Matthew Brown
8ecb8555e2 Fix count 2020-01-04 13:12:22 -05:00
Matthew Brown
37fb15250c Add check for only simplest conditionals 2020-01-04 13:09:55 -05:00
Matthew Brown
8cbc26c2f1 Add range checks to identify for loops that always enter 2020-01-04 13:05:23 -05:00
Matthew Brown
9fa2db1b6c Move Union::getTypes to Union::getAtomicTypes 2020-01-04 12:20:26 -05:00
Matthew Brown
ba6d0df048 Fix #2546 properly 2020-01-04 11:16:53 -05:00
Brown
996053cca6 Fix #2545 - fix bug when coming back after analysing method call in constructor 2020-01-03 11:29:45 -05:00
Brown
0e39759ed6 Improve solution to #2546 slightly 2020-01-03 10:56:47 -05:00
Brown
4263417ac3 Fix #2546 - ignore vars set inside loop 2020-01-03 10:33:32 -05:00
Matthew Brown
d5d4a1826d Add initial support for @mixin Foo 2020-01-02 23:50:19 -05:00
Brown
de0fad2197 Fix #2541 - check variable var assignment 2020-01-02 14:07:02 -05:00
Brown
ca1e65b29b Handle iterators better 2020-01-02 10:41:43 -05:00
Matthew Brown
25e7039f02 The current method is used
Fixes #2540
2020-01-01 18:33:12 -05:00
Matthew Brown
4630d19d45 Fix psalm running 2020-01-01 12:49:12 -05:00
Matthew Brown
4021d673bd Fix #2536 - grab binary op left assertions after analysis 2020-01-01 12:45:24 -05:00
Matthew Brown
d7fb64bbb7 Fix #2349 - use function suppressed issues 2019-12-31 09:16:49 -05:00
Matthew Brown
5bd9b988fb Fix #2494 - don’t use extended name for anonymous classes 2019-12-31 08:46:52 -05:00
Matthew Brown
87fec3e6fe Fix #2505 - don’t attempt to analyse classes that weren‘t properly scanned 2019-12-31 08:04:51 -05:00
Matthew Brown
ec292f58dc Move explode handling into its own file 2019-12-30 16:39:37 -05:00
Matthew Brown
44441042f0 Fix style things 2019-12-30 11:07:04 -05:00
Matthew Brown
366e2d30a3 Improve assertions support a bit more 2019-12-30 10:48:50 -05:00
Matthew Brown
19faa31865 Allow assertions on nested properties 2019-12-30 10:01:31 -05:00
Matthew Brown
c79ba0b09e Include non-empty-string type in more places 2019-12-30 07:25:36 -05:00
Matthew Brown
023c4bcef0 Fix #2532 - fix templating inside class method when calling templated method 2019-12-30 07:25:36 -05:00
Matthew Brown
508c2e268a Process phpstan-template in class docblocks 2019-12-29 16:08:09 -05:00
Matthew Brown
2b88261ecd Fix templated assertion cc @vasily-kartashov
This is a good reason for you to skip 3.8.1
2019-12-29 11:57:54 -05:00
Matthew Brown
b375ebf06f Fix test 2019-12-29 10:29:03 -05:00
Matthew Brown
26876b9a13 array_push shouldn’t change list type 2019-12-29 10:20:44 -05:00
Matthew Brown
d3fb0181cb Fix #2527 - no crash when template cannot be resolved 2019-12-29 08:45:42 -05:00
Matthew Brown
0c7851ae21 Fix #2526 - always check for array assignment in assignop 2019-12-29 08:36:46 -05:00
Matthew Brown
55c2f7faa2 Fix #2508 - don’t replace templated types with generic ones inside own function 2019-12-28 18:38:02 -05:00
Matthew Brown
ce9435da19 Fix #2521 - use correct context class when analysing trait 2019-12-28 15:56:26 -05:00
Bruce Weirdan
4110ec351b Make travis green again (#2518)
* Bumped phpspec/prophecy version to prevent 7.4 deprecations

* Fix DOMDocument::$config type

This property was documented as containing DOMConfiguration object, but
in fact always returned `null` (see [php source](ee80567a83/ext/dom/document.c (L542))).

DOMConfiguration class is removed in PHP 8.

* Dropped unused use

* Allow to set PHP 8.0 as current version

* Fix CallMap issues for PHP 8.0

- Use both major and minor version to load deltas
- Don't load non-existent deltas
- Stop at lowest possible delta
2019-12-27 19:06:09 -05:00
Matthew Brown
982fe627e0 Fix #2515 - allow chained assertions on @psalm-mutation-free methods 2019-12-27 16:44:55 -05:00
Matthew Brown
068afa09d3 Add very basic implementation for class-string-map
Fixes #1969
2019-12-27 12:49:28 -05:00
Matthew Brown
2f2cd85a6a Identify invalid static property array assignment 2019-12-27 10:34:51 -05:00
Valentin Udaltsov
006f788d6a Added array_fill_keys support (#2512)
* Added array_fill_keys support

* Removed unnecessary array_fill_keys phpdoc
2019-12-27 13:30:42 +00:00
Matthew Brown
6b81f8c64a Fix #2506 - use correct flag when checking classes after analysis 2019-12-24 01:02:34 +00:00
Matthew Brown
ee35db5a3b Refine assignment somewhat 2019-12-22 12:43:57 +00:00
Matthew Brown
141bfd313f Improve handling of assignments in arrays 2019-12-22 12:36:16 +00:00
Matthew Brown
8bd68608fa Fix message 2019-12-22 11:08:47 +00:00
Matthew Brown
4c8730c5a3 Improve handling of unset array, ensuring that keys don’t persevere 2019-12-22 01:42:39 +00:00
Matthew Brown
946b4f73e6 Fix #2493 - don’t crash when provided function doesn’t exist 2019-12-21 00:34:31 +00:00
Matthew Brown
8c1638efc5 Fix tests once more 2019-12-20 19:37:36 +00:00
Matthew Brown
3d03da271d Fix tests to give more accurate locations 2019-12-20 18:18:26 +00:00
Matthew Brown
e475a1826c Issues with non-abstract methods should always be MethodSignatureMismatches 2019-12-20 18:08:35 +00:00
Matthew Brown
a5434aabfe Fix #2491 - report trait issues at the most local place 2019-12-20 17:57:31 +00:00
Matthew Brown
1b54d058aa Fix #2488 - add support for @phpstan- annotations 2019-12-20 10:49:10 +00:00
Matthew Brown
a4191171bf Fix #2483 - treat intersecting PHPDocs from interfaces better 2019-12-20 01:42:57 +00:00
Matthew Brown
d7b99148be Add support for JUnit report type
Fixes #2485
2019-12-19 20:18:09 +00:00
Matthew Brown
15cd62d332 Fix #2484 - add support for spaces in assert-if-true types 2019-12-19 19:24:26 +00:00
Matthew Brown
cc3df7d6be Remove errant comma 2019-12-18 23:50:57 +00:00
Matthew Brown
af28d650f3 Fix #2408 - existing offsets checked with isset should be valid 2019-12-18 23:48:25 +00:00
Matthew Brown
734ad02203 Fix #2476 - flesh out iterable params 2019-12-18 17:19:54 +00:00
Matthew Brown
9d8ca08fb9 Fix #2479 - analyse undefined function arguments too 2019-12-18 16:37:48 +00:00
Matthew Brown
11433dc9d0 Fix references 2019-12-18 14:43:15 +00:00
Matthew Brown
cb797c6159 Fix inherited class methods as well
Ref #2478
2019-12-18 14:39:37 +00:00
Matthew Brown
49a3f89526 Fix #2478 - process trait template inheritance sensibly 2019-12-18 13:58:37 +00:00
Brown
e551b24843 Classes that just reference themselves aren’t used 2019-12-16 11:46:10 -05:00
Matthew Brown
bf67c036aa Fix #2474 - treat free-standing binaryops as ifs instead 2019-12-16 08:32:00 -05:00
Matthew Brown
090ad90de3 Fix build issues 2019-12-15 13:28:38 -05:00
Matthew Brown
72f3c306d7 Fix #2471 - don’t erroneously template class-strings 2019-12-15 13:23:04 -05:00
Matthew Brown
1a92e98dd3 Warn about more generic callables 2019-12-14 11:55:26 -05:00
Matthew Brown
ce2e5b27c0 Fix #2470 - only parameterise constructors according to inherited params 2019-12-14 11:38:09 -05:00
Matthew Brown
c7a3ba9e4a Refine callable type 2019-12-14 10:47:20 -05:00
Matthew Brown
b48021dbfd Allow null return on template with null as type
Ref #2466
2019-12-13 21:56:43 -05:00
Matthew Brown
f40b6625eb Fix #2431 - allow null in template defaults 2019-12-13 21:40:09 -05:00
Brown
2469f04715 Improve reconciliation of arrays with constant offsets 2019-12-13 17:17:14 -05:00
Brown
6d02aa86e8 Reconcile string emptiness a bit better 2019-12-13 15:51:54 -05:00
Matthew Brown
ca5f8fabdc Fix #2464 - null coalesce shouldn’t allow undefined vars 2019-12-13 08:06:40 -05:00
Matthew Brown
6ff312fe13 Fix test 2019-12-12 11:43:03 -05:00
Matthew Brown
1df77a9f43 Only mark vars as reconcilable if they can be memoized 2019-12-12 11:24:47 -05:00
Matthew Brown
f45014d403 Fix #2460 - allow assertions on immutable method calls 2019-12-12 09:32:33 -05:00
Matthew Brown
8f25183784 Fix #2459 - don’t add assertions to parent context unnecessarily 2019-12-12 00:37:00 -05:00
Brown
05783eb616 Find issues with impossible property values 2019-12-11 17:08:02 -05:00
Brown
d2b99cbe77 Add possibly defined vars in binary op analysis 2019-12-11 13:09:27 -05:00
Brown
e476eed111 Fix issue where inside_conditional is forgotten 2019-12-11 12:06:10 -05:00
Brown
2f9b1ff665 Fix too-long line 2019-12-11 11:40:47 -05:00
Brown
e564d67214 Add support for simple default arrays in @method docblocks
Fixes #2455
2019-12-11 11:29:00 -05:00
Brown
3a7dd61889 Fix #2457 - allow psalm-type aliases to be used above return type 2019-12-11 10:30:40 -05:00
Brown
4b715cdbff Fix #2456 - ignore UnusedFunctionCall when function asserts 2019-12-11 10:13:22 -05:00
Matthew Brown
c27d0d953b Add null check 2019-12-11 00:38:28 -05:00
Matthew Brown
848cbbb487 Fix #2454 - build up template map to better understand passed-through data 2019-12-11 00:34:54 -05:00
Brown
b3cf9d3958 Catch circular references in constants
Fixes #2453
2019-12-10 16:16:44 -05:00
Brown
20049eb0b5 Fix #2437 - don’t worry about mixed templated param types 2019-12-10 14:58:26 -05:00
Brown
74de32fefe Allow multiple @psalm-assert annotations for a given variable 2019-12-09 17:21:58 -05:00
Brown
b78acf796f Fix #2445 - only generalise param when it’s generic 2019-12-09 10:58:09 -05:00
Matthew Brown
d6a731be73 Fix #2441 - add error when @template type is missing 2019-12-08 21:19:29 -05:00
Matthew Brown
e3d108ebd9 Fix #2439 - fix templating of class-string<T>::returnsStatic 2019-12-08 21:12:25 -05:00
Matthew Brown
69e6624b16 Fix #2436 - fix templating of property types inside templated functions 2019-12-08 19:25:40 -05:00
Matthew Brown
02fbf12337 Only warn about clauses in the currently-scanned conditional 2019-12-08 16:35:56 -05:00
Matthew Brown
c9f43782fd Fix mixed method issues after defining new type 2019-12-08 10:17:40 -05:00
Matthew Brown
83b10bb9af Fix #2426, or at least some of it 2019-12-08 00:49:34 -05:00
Matthew Brown
2e00ad2240 Treat more things as assignments 2019-12-07 15:58:05 -05:00
Matthew Brown
f0cd7eab04 Remove redundant calls 2019-12-07 14:05:43 -05:00
Matthew Brown
3c52102388 Fix #2438 - improve handling of get_class calls 2019-12-07 14:03:20 -05:00
Matthew Brown
2b6831ba10 Fix too-long line 2019-12-07 01:38:24 -05:00
Matthew Brown
df395944f8 Change how $changed_var_ids is communicated 2019-12-07 01:23:35 -05:00
Brown
ef44bd104e Consolidate some fixes from the binaryop branch 2019-12-06 12:47:27 -05:00
Brown
19838fc7f5 Fix #2423 - pass by ref variable status after byref assignment 2019-12-05 13:37:03 -05:00
Brown
8ff33ee64d Fix #1943 - give up analysing really complicated conditionals 2019-12-05 10:26:53 -05:00
Tyson Andre
6b2c1401c8 Workaround for uncaught InvalidArgumentException (#2420)
Fixes #2419
2019-12-04 23:16:51 -05:00
Brown
e1dd22ef6c Allow static::class to be used in array assertions 2019-12-04 12:23:26 -05:00
Matthew Brown
97de060df9 Fix #2279 - add parameter typehint by default 2019-12-03 01:49:43 -05:00
Brown
821f3528d2 Fix #701 - indicate issues fixable with Psalter 2019-12-02 15:24:01 -05:00
Matthew Brown
27c9aa4286 Fix code and test 2019-12-01 10:43:51 -05:00
Matthew Brown
f21150b8ad Fix #2384 - fix resolution of @param-out template types 2019-12-01 10:40:53 -05:00
Matthew Brown
ef829002bf Fix ref 2019-12-01 10:33:27 -05:00
Matthew Brown
e40aaafe61 Allow explicit @var mixed docblocks
Fixes #2397
2019-12-01 10:19:42 -05:00
Matthew Brown
4e07779497 Allow callable-string to be used for callable 2019-12-01 01:15:14 -05:00
Matthew Brown
04879af105 Be less forgiving when extending builtin generic classes 2019-11-30 09:32:21 -05:00
Matthew Brown
6ff06a4b32 Don’t bypass generator second arg when checking variance 2019-11-30 01:27:27 -05:00
Matthew Brown
baef67e0d8 Fix evaluation order of covariant template params before invariant ones 2019-11-30 01:02:23 -05:00
Matthew Brown
2383945fb9 Support __METHOD__ and __FUNCTION__ magic constants better 2019-11-29 22:47:20 -05:00
Matthew Brown
1e3ecb5fd0 Fix #2387 - ensure docblock return types are checked 2019-11-29 11:20:37 -05:00
Matthew Brown
6a98108deb Apply @ShiraNai7’s fix for null const values 2019-11-29 10:12:46 -05:00
Pavel Batečko
dc78e9c57b Update password function types for PHP 7.4 (#2396)
* Support NULL predefined constants

* Fix #2395 - update password_hash() and password_needs_rehash() types for PHP 7.4

* Change $fq_const_name check so it still uses isset
2019-11-29 09:30:01 -05:00
Bruce Weirdan
33142e7637 Use unalised trait name when importing aliased trait (#2393)
Fixes vimeo/psalm#2392
Refs vimeo/psalm#2278
2019-11-29 01:21:00 -05:00
Matthew Brown
4052e6dfac Allow isset to check for property initialisation
Ref #2382
2019-11-28 09:12:17 -05:00
Matthew Brown
113bf921f6 Add support for arrow function inference 2019-11-27 10:12:59 -05:00
Matthew Brown
a154191922 Fix #2380 - prevent string docblock for callable param 2019-11-27 09:18:47 -05:00
Matthew Brown
4334ddcaa3 Fix style 2019-11-27 02:11:18 -05:00
Matthew Brown
3f2d57c7a3 Fix #2379 - support spread array RFC 2019-11-27 02:07:17 -05:00
Matthew Brown
c75f7dc4d5 Fix #2339 - add support for null coalescing operator 2019-11-27 00:34:23 -05:00
Matthew Brown
d1c4c85f97 Support covariant return types & contravariant param types
Fixes #2102 and #2264
2019-11-27 00:19:36 -05:00
Matthew Brown
d1fbd1fa26 Add working arrow-functions implementation 2019-11-26 23:52:26 -05:00
Brown
f97a8f0d5b Use more accurate way to determine list size 2019-11-26 16:34:19 -05:00
Brown
736ccd84cd Allow more generic iterable when yielding
Fixes #2353
2019-11-25 16:12:44 -05:00
Brown
5626058eff Fix #2374 - refine error-suppressed output a little better 2019-11-25 15:38:54 -05:00
Brown
1f07ea7ee7 Tighten up Psalm’s inference 2019-11-25 15:20:31 -05:00
Brown
96c4eeec98 When calling magic method clone node info 2019-11-25 13:08:38 -05:00
Brown
1add42b691 Fix switch handling 2019-11-25 11:51:34 -05:00
Brown
0bcb7863f3 Use better system for storing inferred types and assertions 2019-11-25 11:44:54 -05:00
Brown
78a3894403 Fix Psalm errors 2019-11-21 11:03:18 -05:00
Matthew Brown
4c2f7ad8db Add slash 2019-11-21 09:06:19 -05:00
Matthew Brown
3d9c94e29a Fix #2363 - catch possible class not found errors when getting method 2019-11-21 08:56:47 -05:00
Brown
81f513bb4c Fix #2358 - always analyse new XXX(...) in unknown method calls 2019-11-18 16:14:21 -05:00
Matthew Brown
e76beffa78 Fix #2355 - don’t remove used variables 2019-11-17 14:53:08 -05:00
Matthew Brown
2369bac943 Preserve self refs where possible 2019-11-16 19:59:08 -05:00
Matthew Brown
7d7d4dd926 Fix style stuff 2019-11-15 21:47:53 -05:00
Brown
55bf6a2db3 Migrate static return types 2019-11-15 16:50:43 -05:00
Brown
4747ba709a Migrate more things 2019-11-15 15:34:25 -05:00
Brown
5e17a9af10 Fix #2348 - ensure all functions and methods return some type 2019-11-14 14:44:29 -05:00
Brown
b3a15e8016 Fix #2349 - allow suppression of InvalidReturnType for no-return 2019-11-14 14:33:07 -05:00
Brown
b693b726c7 Improve handling of default extended params 2019-11-14 12:12:09 -05:00
Brown
70b8df268d Fix template covariance calculation, use container covariance not inputs 2019-11-14 11:43:49 -05:00
Brown
a5c3304853 Add support for if replacement 2019-11-14 11:03:16 -05:00
Matthew Brown
5fabf41c8e Check for not-callable return value 2019-11-14 07:57:22 -05:00
Matthew Brown
0b1f83ff98 Fix #2346 - map covariance of templated return types when extending with more params 2019-11-14 07:45:20 -05:00
Brown
00be4c2071 Mark var as unused 2019-11-13 15:06:22 -05:00
Brown
fe5e675881 Improve unvariable removal 2019-11-13 15:05:21 -05:00
Brown
c9e7dcfa92 Fix false positive UnusedVariable 2019-11-13 14:32:27 -05:00
Brown
7516b7b0cf Fix #2336 - detect used variable in mixed array offset 2019-11-13 13:38:34 -05:00
Brown
7b719915f5 Fix style things 2019-11-12 10:21:27 -05:00
Brown
25b60eb944 Fix #2325 - ignore unused vars with $_ prefix 2019-11-12 10:20:34 -05:00
Brown
7f5af741f7 Improve assertion calculation on mixed vars 2019-11-12 10:12:07 -05:00
Matthew Brown
7012bedf4e Fix #2326 - substitute static more responsibly in generic objects 2019-11-12 08:01:22 -05:00
Matthew Brown
b1aae0d1a5 Fix more try/catch stuff 2019-11-12 00:52:10 -05:00
Brown
51557c44ea Evaluate finally blocks at the end of every catch 2019-11-11 18:38:33 -05:00
Brown
da03902f76 Fix handling of do... while vars defined in try 2019-11-11 18:24:43 -05:00
Brown
f22266b2ff Improve reasoning around try/catch possibly-undefined vars 2019-11-11 17:42:46 -05:00
Brown
1a54aa5752 Fix test 2019-11-11 17:07:26 -05:00
Brown
cd2f8e7d65 Fix memory corruption 2019-11-11 16:56:44 -05:00
Brown
935bad9d2c Fix erroneous unused variable 2019-11-11 16:52:55 -05:00
Brown
d15989c975 Allow catch to assume no try statements completed 2019-11-11 15:17:53 -05:00
Brown
658f86c277 Fix #2324 - avoid fatal error on self string in callable 2019-11-11 14:59:05 -05:00
Brown
fbd1cf0a71 Fix #2322 - don’t update outer context if elseif has no leaving statements 2019-11-11 11:46:27 -05:00
Brown
96586f16c0 Fix phpcs issues 2019-11-11 10:11:42 -05:00
Brown
af5f83602e Break out more specific possibly defined offset errors 2019-11-11 09:59:56 -05:00
Brown
46d163996e Fix #2321 - prevent inferred template coercion 2019-11-11 09:14:34 -05:00
Bruce Weirdan
79acbadfad Added InvalidParent issue (#2320)
Refs vimeo/psalm#2304
2019-11-11 00:21:43 -05:00
Matthew Brown
94d4b876ba Fix #2177 - mark variables in try block as potentially undefined 2019-11-09 12:25:30 -05:00
Matthew Brown
62a3598ed3 Fix #2197 - prevent false positive from try in while 2019-11-09 11:01:48 -05:00
Matthew Brown
7028a64440 Fix #2204 - fix try/catch false-positive 2019-11-09 10:39:21 -05:00
Brown
895737d8be Fix style 2019-11-08 12:49:53 -05:00
Brown
ac6256e645 Fix #2312, improve understanding of template replacement 2019-11-08 11:56:41 -05:00
Joram Schrijver
c97ba8f713 Implement type-checking and forbidding for print (#2314)
* Add type-checking for print

* Allow print to be forbidden
2019-11-08 07:01:34 -05:00
Brown
3d7b34e7f6 Fix #2273 - ensure all template params are bound 2019-11-07 11:03:41 -05:00
Brown
86b6801066 Fix #2294 - detect invalid callble due to __invoke 2019-11-07 09:39:24 -05:00
Brown
64996f464e Prevent empty array workaround to #2308 2019-11-06 16:59:08 -05:00
Brown
06b64a4a01 Detect erroneous use of empty check on bools 2019-11-06 16:14:46 -05:00
Brown
3e98c800ec Fix #2309 - prevent closure-inferred generic template params overwriting parent ones 2019-11-06 13:13:02 -05:00
Brown
a8ed6ba9c4 Fix #2308 - prevent specialisation from bound params 2019-11-06 11:20:51 -05:00
Matthew Brown
d7e435c352 Add slashes 2019-11-05 19:08:16 -05:00
Matthew Brown
050045209f Only allow string offset assignment when offset is integer 2019-11-05 19:05:43 -05:00
Matthew Brown
cbaf050bd2 Fix #2307 - allow setting of array string offset 2019-11-05 19:03:59 -05:00
Matthew Brown
b81a2d3852 Fix #2306 - allow nullable templated params to be compared to null 2019-11-05 18:37:46 -05:00
Brown
818f0c0985 Flesh out list types
Fixes #2300
2019-11-05 13:08:12 -05:00
Brown
d8ae33957d Fix strtolower ref 2019-11-04 15:14:07 -05:00
Brown
1f42843d42 Fix #2296 - use case insensitive closure ids 2019-11-04 14:48:02 -05:00