1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-15 10:57:08 +01:00
Commit Graph

3375 Commits

Author SHA1 Message Date
Matthew Brown
312be71be1 Localise overridden templated param types 2019-03-14 10:11:45 -04:00
Brown
71a99808fe Increase max length of strings 2019-03-12 13:15:20 -04:00
Brown
85f34f2aca Add defining class and increas string length 2019-03-12 12:58:04 -04:00
Matthew Brown
2932e3eb83 Allow numeric to be coerced to literal int 2019-03-12 01:26:19 -04:00
bugreportuser
806ce145ea Fix PHP7 error 2019-03-11 15:53:21 -04:00
bugreportuser
0e9fb04f06 Define globals in more places 2019-03-11 15:53:21 -04:00
Brown
e22f216a5b Allow callable|array to be coerced to an array 2019-03-11 11:39:33 -04:00
Matthew Brown
17235cedf9 Allow sequential unsets with missing keys 2019-03-11 01:54:32 -04:00
Matthew Brown
907244cd23 Don’t assert on non-empty checks 2019-03-11 01:35:09 -04:00
Matthew Brown
95b986d2d4 Fix #1367 - allow assertions on mixed arrays to define objectlike type 2019-03-10 23:38:30 -04:00
Matthew Brown
b0853bcde6 Fix #1376 - allow nonzero numeric array key asssertions 2019-03-10 17:54:03 -04:00
Matthew Brown
848b070946 Fix #1413 - don’t complain about byref use param 2019-03-10 16:36:35 -04:00
bugreportuser
c8fffe362a Allow capitalized @inheritDoc 2019-03-09 20:26:17 -05:00
Brown
e5f7a5a4bc Coerce class string types together 2019-03-08 17:35:09 -05:00
bugreportuser
57a4522ee7 Flesh out callable arg types 2019-03-07 23:24:50 -05:00
bugreportuser
d120e582ac Use config globals for invalid global scope 2019-03-07 23:21:56 -05:00
bugreportuser
339a26c801 Fix getChildren return types 2019-03-07 23:20:42 -05:00
SignpostMarv
02c27894de adding property that was introduced in 7.1, not sure how to accurately describe & test this with deltas 2019-03-07 23:20:05 -05:00
Matthew Brown
c800fb9282 Fix #1437 - use correct return type line for error 2019-03-07 23:19:17 -05:00
Matthew Brown
85f0fa6e7d Add support for literal templated defaults 2019-03-07 22:32:38 -05:00
Brown
5beb26659e Add special type for SQL select strings for plugins to consume 2019-03-07 14:56:18 -05:00
Brown
0b74c6a6e7 Fix interface name ref 2019-03-07 11:30:05 -05:00
Brown
b3a59d2638 Fix #1435 - prevent classes extending interfaces 2019-03-07 11:16:40 -05:00
Matthew Brown
e84eec7275 Fix #1434 - allow local suppression of return type checks 2019-03-07 09:21:03 -05:00
Brown
a8ea907d6c Fix #1432 - allow callable to be coerced to callable-array 2019-03-06 18:24:59 -05:00
bugreportuser
b34dbe26e2 Allow setting superglobal types 2019-03-06 15:59:41 -05:00
bugreportuser
056e5a5b1e Allow setting globals in config 2019-03-06 15:59:41 -05:00
Brown
9442805763 Mutation checks should not care about return type 2019-03-06 11:12:36 -05:00
Brown
ae69695f89 Prevent tests in PHP 7.1 2019-03-05 18:27:25 -05:00
Brown
cece1def30 Fix #1427 - allow extended methods to be used as callables 2019-03-05 18:02:42 -05:00
Brown
bd372e93af Add config flags for findUnusedVariables and findUnusedCode 2019-03-05 15:45:09 -05:00
Brown
cfa0829a38 Make scanner more accepting of reflection errors 2019-03-04 13:20:19 -05:00
Roland Franssen
efc0beab6c fix --help end of line 2019-03-04 07:25:58 -05:00
Matthew Brown
aeab6e292b Prevent bugs when checking for initialisation 2019-03-04 00:17:45 -05:00
Matthew Brown
9bfabab976 Add support for psalter in Phar 2019-03-03 22:59:00 -05:00
Matthew Brown
92cba71a06 Add extra arg to return type call 2019-03-03 22:57:40 -05:00
Tyson Andre
6f7295ed13 Remove unused use statements 2019-03-03 22:22:36 -05:00
Matthew Brown
48b39a15b9 Don’t change value of $this by reference 2019-03-03 20:16:11 -05:00
Matthew Brown
17801362f5 Ignore all potentially mixed issues 2019-03-03 18:28:12 -05:00
Matthew Brown
74246c1cf7 Remove errant space 2019-03-03 18:25:14 -05:00
Matthew Brown
a31420be5b Fix checks for existing vars used in by-ref assignments 2019-03-03 18:21:12 -05:00
Matthew Brown
9e8c3b8c6e Only check interfaces for static matchup 2019-03-03 18:13:15 -05:00
Matthew Brown
5b38082454 Complain about non-static comparison
Fixes #1383
2019-03-03 17:41:15 -05:00
Matthew Brown
8d59ab736f Allow password_hash to return false or null (this will change in 7.4) 2019-03-03 17:09:43 -05:00
Matthew Brown
b7320e2778 Remove unnnecessary param 2019-03-03 16:45:35 -05:00
Matthew Brown
fb9e9bea32 Fix const reference in current context 2019-03-03 16:43:24 -05:00
Matthew Brown
472cdf6bea Fix #1379 - allow @param-out to change type 2019-03-03 15:11:09 -05:00
Matthew Brown
82e6876011 Fix #1397 - fix get_class behaviour for new instances 2019-03-02 18:02:11 -05:00
Matthew Brown
ef0abf1c30 Fix #1411 - allow covariance on extended templates 2019-03-02 16:31:34 -05:00
Matthew Brown
f9b1a63146 Fix #1421 - variadic params are extra 2019-03-02 15:26:18 -05:00
Matthew Brown
4757c2fe8e Fix messaging 2019-03-02 15:19:59 -05:00
Matthew Brown
5e61f198e1 Fix #1419 - allow checks against empty arrays 2019-03-02 15:18:29 -05:00
Matthew Brown
efbcf7dc5b Fix #1417 - store root file path when scanning for manipulations 2019-03-02 15:07:26 -05:00
Matthew Brown
4ba15ec18d Flip abstract trait analysis implementation checks
Fix #1414
2019-03-02 14:17:26 -05:00
bugreportuser
65102b8088 Fix non-empty-array @param in namespace (#1416) 2019-03-02 08:35:50 -05:00
Matthew Brown
5c76ab35c8 Allow properties to be set regardless of visibility 2019-03-01 17:30:55 -05:00
Matthew Brown
4bbe13e28f Fix #1412 - use proper method name where appropriate 2019-03-01 13:33:23 -05:00
Matthew Brown
564da61937 Add missing return type 2019-03-01 09:24:52 -05:00
Matthew Brown
619590aa71 Fix parsing of template of type with spaces
Fixes #1406
2019-03-01 09:20:59 -05:00
Bruce Weirdan
e734b54aab Fix vimeo/psalm#1409 (#1410) 2019-03-01 09:09:48 -05:00
Matthew Brown
4cc93644e5 Added more descriptive type for callables
Ref #1408
2019-03-01 09:06:37 -05:00
Matthew Brown
317f790bde
New plugin hooks (#1405)
* Add a bunch of new hooks

* Add more integrations

* Add some broken tests

* Add more things

* Fix remaining interfaces

* Suppress proper issue

* UndefinedMethod should not stop analysis

* Add handlers for two custom method return types
2019-03-01 08:57:10 -05:00
Matthew Brown
d1cf9d61ba Fix #1398 - improve casting rules for resource 2019-03-01 00:50:22 -05:00
Matthew Brown
42d4156423 Add DOMElement constructor 2019-03-01 00:09:22 -05:00
Matthew Brown
ee942b3c02 Fix return type 2019-03-01 00:06:35 -05:00
Matthew Brown
55e125f495 Check method args before returning 2019-02-28 23:59:17 -05:00
Matthew Brown
b8b752ed01 Fix #1402 - don’t halt after suppressing static UndefinedMethod 2019-02-28 23:46:11 -05:00
Matthew Brown
b3c5120d72 Fix #1403 - warn about duplicate templates 2019-02-28 23:43:55 -05:00
Brown
b2c236a1a1 Allow @psalm-variadic annotation 2019-02-28 14:44:35 -05:00
Brown
815bf845dc Improve handling of method/function return types 2019-02-27 17:06:44 -05:00
Brown
f8c2b2d81a Fix #1399 - allow literal comparison to scalar 2019-02-27 16:21:23 -05:00
Brown
07825c9ff8 Fix long line 2019-02-27 16:16:19 -05:00
Brown
601f303de2 Fix position of invalid param 2019-02-27 16:00:44 -05:00
Brown
d46c6ac0e4 Fix #1395 - set all callable types as coming from a docblock 2019-02-27 14:52:58 -05:00
François Kooman
fa26499dd9 fix return value for Sodium\crypto_aead_aes256gcm_decrypt 2019-02-27 14:24:57 -05:00
Brown
1263a2e9a3 Fix missing param location 2019-02-27 14:17:11 -05:00
Brown
119687f934 Fix redundant condition message when negating a docblock type 2019-02-27 14:02:02 -05:00
Matthew Brown
6af222f36a Fix #1393 - support analysing non-empty-array calls 2019-02-27 09:08:27 -05:00
Matthew Brown
b310cc07b5 Array access on objects should always be treated as method call 2019-02-26 21:24:30 -05:00
Bruce Weirdan
9c5ee3e9d6 Added AfterCodebasePopulated hook registration 2019-02-26 01:16:22 -05:00
Bruce Weirdan
24a71be425 Added Hook\AfterCodebasePopulatedInterface 2019-02-26 01:16:22 -05:00
Matthew Brown
8650f9eb1a Fix #1356 - improve assertion system to work better on function calls 2019-02-26 01:03:33 -05:00
Bruce Weirdan
abb1c95b94 Limited custom metadata to be (array of) scalars
Also moved `$custom_metadata` property to trait
2019-02-25 10:19:31 -05:00
Bruce Weirdan
19a9ff4bcf Added custom storage metadata 2019-02-25 10:19:31 -05:00
Brown
f5ce136dc7 Simplify handle type for pcntl_signal 2019-02-25 10:16:16 -05:00
bugreportuser
7f7125f334 Fix crash for empty string array access 2019-02-25 08:26:12 -05:00
Matthew Brown
4f770d356e Fix #1384 - evaluate array fetches even when we don’t know function 2019-02-24 09:58:11 -05:00
Matthew Brown
674657a51d Fix 7.0-incompatible logic 2019-02-24 01:47:53 -05:00
Matthew Brown
3ad1abece4 Add generation of json artifacts 2019-02-24 01:33:25 -05:00
Matthew Brown
fff56f7b26 Use better heuristic to determine missing types 2019-02-23 11:39:00 -05:00
Matthew Brown
cdae79b9fe Fix unnecessary params in Psalm codebase 2019-02-23 11:31:33 -05:00
bugreportuser
68a135f434 Allow @psalm-property and @psalm-method 2019-02-23 11:04:08 -05:00
bugreportuser
34b333cf7f Fix file return types 2019-02-23 11:03:35 -05:00
Matthew Brown
6671e0dc7c Fix #1382 - flag unused docblocks 2019-02-23 11:02:04 -05:00
Matthew Brown
6420a5605b Put nullable in docblock for PHP 7.0 2019-02-22 01:05:35 -05:00
Matthew Brown
3d4710c9d3 Add better checks for invalid array_map/array_filter args 2019-02-22 00:50:41 -05:00
Matthew Brown
ce4f2e6334 Fix #1364 - use proper types for extended getIterator calls 2019-02-21 23:01:34 -05:00
Matthew Brown
f87827e812 Fix #1288 - prevent template names from clashing with real-world classes 2019-02-21 21:54:00 -05:00
Matthew Brown
1c8a573b5f Change TGenericParam to TTemplateParam 2019-02-21 21:40:06 -05:00
Brown
154e1fa38b Fix #1375 - improve treatment of dynamically-declared namespaces 2019-02-21 18:19:12 -05:00
Brown
653555a8cc Remove unused var 2019-02-21 17:49:33 -05:00
Brown
41b133178a Improve handling of count comparisons 2019-02-21 17:17:10 -05:00
Brown
00b225beda Strip $ in token 2019-02-21 16:13:31 -05:00
Brown
0b7d4e4aad Add slightly hacky support for param names in callables 2019-02-21 16:00:18 -05:00
Brown
375f3917b2 Prevent empty unions as soon as possible 2019-02-21 15:09:55 -05:00
Brown
b7a0950aea Prevent passing casts to byref vars 2019-02-21 13:26:37 -05:00
Bruce Weirdan
991fd90a12 Added tests for exposed methods 2019-02-21 08:43:57 -05:00
Matthew Brown
0e5ee1a811 Fix typo 2019-02-21 08:43:57 -05:00
Bruce Weirdan
adc5d24399 Added documentation for several exposed methods
Documented:
- isTypeContainedByType
- canTypeBeContainedByType
- getKeyValueParamsForTraversableObject
2019-02-21 08:43:57 -05:00
Bruce Weirdan
a0e040a462 Expose more internal methods through Codebase
- `bool Codebase::canTypeBeContainedByType(Union $input, Union $container)`
- `array{Union,Union} Codebase::getKeyValueParamsForTraversableObject(Atomic $type)`

For usage, see psalm/phpunit-psalm-plugin#15
2019-02-21 08:43:57 -05:00
Brown
1e2c29041f @param-out should not override @param byref type def
when checking for unuitialised vars
2019-02-20 18:53:42 -05:00
Brown
079ac44263 Prevent pass by ref when type type is given 2019-02-20 17:43:12 -05:00
Brown
d2968081f8 Fix #1370 - allow phpstorm generic iterator 2019-02-20 11:13:40 -05:00
bugreportuser
024488c1d6 Use helper methods 2019-02-20 10:55:36 -05:00
bugreportuser
c097c59f33 Remove wrong condition 2019-02-20 10:55:36 -05:00
bugreportuser
14ee221075 Fix errors 2019-02-20 10:55:36 -05:00
bugreportuser
cd23a19931 Allow concat for define first arg 2019-02-20 10:55:36 -05:00
bugreportuser
f603449745 Infer literal string for __namespace__ 2019-02-20 10:55:36 -05:00
Matthew Brown
6b045236e0 Use appearing method for array lookup 2019-02-20 02:41:59 -05:00
Brown
348b8eef1f Fix #1366 - don’t complain about invalid array offset when possibly mixed 2019-02-19 11:42:24 -05:00
Matthew Brown
cd2eb3edb9 Fix #1361 - flesh out array map return type before using 2019-02-19 01:25:36 -05:00
bugreportuser
61e086ac7b Ignore more redundant issues 2019-02-18 22:44:26 -05:00
Matthew Brown
f49be31aeb Fix #1332 - use the correct identifier for trait property resolution 2019-02-18 16:52:09 -05:00
Matthew Brown
41255b42c6 Fix #1325 - allow MissingThrowsDocblock to be suppressed 2019-02-18 16:41:06 -05:00
Matthew Brown
75104f4712 Fix #1359 - error on bad iterable args 2019-02-18 16:35:23 -05:00
Matthew Brown
6b419452af Fix #1337 - don’t crash when examining __call methods in initialisation checks 2019-02-18 16:04:27 -05:00
Matthew Brown
81a5a24e15 Suppress PossiblyUnusedMethod 2019-02-18 15:56:31 -05:00
Bruce Weirdan
e87f500458 Added Psalm\Codebase::isTypeContainedByType() 2019-02-18 15:56:31 -05:00
Matthew Brown
3fdef1a032 Fix #1350 - allow parameterised iterable and unparameterised traversable 2019-02-18 13:01:20 -05:00
Matthew Brown
709a5c31da Allow bitwise or ops to change type
Ref #1340
2019-02-18 12:53:55 -05:00
Matthew Brown
5aaa68c214 Add better error message and also update callmap 2019-02-18 12:28:30 -05:00
Matthew Brown
12f1ffca11 Fix issue reconciling mixed vars inside loop 2019-02-18 11:39:05 -05:00
Bruce Weirdan
faae9fda3b Added option to force dead code detection
Previously Psalm would only check class references when there were no
paths passed on the command line. Now it's possible to force this check
even when paths are specified, with `--find-dead-code=always`.

`--find-dead-code` without a value (or with any value apart from `always`)
will continue to work the same way it did before.
2019-02-18 09:34:28 -05:00
ADmad
8d54825582 Fix signature for datefmt_create(). 2019-02-18 09:33:08 -05:00
Bruce Weirdan
cb453a8da9 Allow suppressing UnusedClass on specific classes
This allows suppressing UnusedClass with either `referencedMethod` or
`@psalm-suppress`

Fixes vimeo/psalm#1353
2019-02-18 09:32:09 -05:00
bugreportuser
24cdb6e1d3 Fix array_unique stub 2019-02-17 21:35:54 -05:00
Matthew Brown
5777e008c0 Remove var_dump 2019-02-17 13:18:23 -05:00
Bruce Weirdan
8408effe57 Dropped unused uses 2019-02-17 13:17:45 -05:00
bugreportuser
93bc7c477e Fix mb return types 2019-02-17 13:16:55 -05:00
ADmad
7298638dff Fix invalid return type in callmap.
apu_delete() only returns boolean.
http://php.net/manual/en/function.apcu-delete.php
2019-02-17 13:15:59 -05:00
Matthew Brown
40a91eab6e Fix #1339 - no crash when using self/static/parent in closure 2019-02-17 13:14:59 -05:00
bugreportuser
8edb117451 Fix password_hash change between versions 2019-02-16 23:57:49 -05:00
bugreportuser
13f182bf9f Revert "fixed password_hash signature"
This reverts commit 32377d6751.
2019-02-16 22:13:05 -05:00
Matthew Brown
a428b34a1a Fix #1338 - ignore redundant issues when collecting initialisations 2019-02-16 20:27:42 -05:00
Matthew Brown
356a45a155 Improve ergonomics of PHPStorm meta parsing 2019-02-16 18:50:25 -05:00
Matthew Brown
2ef82d785f Improve signature of FunctionReturnTypeProvider to omit internal things 2019-02-16 15:29:54 -05:00
Matthew Brown
fa362b04cb Fix treatment of '' => '@' mapped value 2019-02-16 12:16:34 -05:00
Matthew Brown
0739d017ac Use information from .phpstorm.meta.php files in stubs 2019-02-16 11:16:52 -05:00
Matthew Brown
d5420a7708 Suppress PossiblyUnusedParam for PHP 7.0 2019-02-15 18:50:23 -05:00
Matthew Brown
0c9c8c204c Suppress UndefinedMethod for Php 7.0 Psalm check 2019-02-15 18:41:30 -05:00
Matthew Brown
149d7cab1c Add PHP 7.0-compatible closure creation 2019-02-15 18:33:29 -05:00
Matthew Brown
d76459e138 Move to a PHPStan-like return type provider class model 2019-02-15 18:00:40 -05:00
Matthew Brown
0ea22e8d82 If we’re checking $_SESSION for existence return an array
Fixes #1335
2019-02-15 15:58:36 -05:00
Brown
dca8bf9d36 Fix #1329 - improve handling arrays with string offsets 2019-02-15 14:42:17 -05:00
Brown
d70e29508f Don’t fatal error when callable class does not exist 2019-02-15 12:02:44 -05:00
Brown
0f45d14fea Only collapse Traversable|array when we’re super sure it’s safe
Fixes #1333
2019-02-15 11:07:08 -05:00
Brown
27c99aed2f Improve recovery from InvalidScalarArgument issue 2019-02-14 16:55:54 -05:00
Brown
9f1dc425d0 Reduce repetition in the baseline files 2019-02-13 15:10:50 -05:00
Brown
50421b297a Don’t report undefined properties when collecting initialisations 2019-02-13 14:04:10 -05:00
Brown
3deea3980d Add checks for unitialized properties
Fixes #1328
2019-02-13 13:32:19 -05:00
Matthew Brown
3497ad4765 Allow namespaced use of optional callable params 2019-02-11 08:41:48 -05:00
Matthew Brown
7fdc226ac5 Always remove callable type 2019-02-11 01:44:07 -05:00
Matthew Brown
e5360a6faa Check callable types too 2019-02-11 01:41:28 -05:00
Matthew Brown
867ea1fa34 Fix #1320 - allow iterable comparison 2019-02-10 23:51:26 -05:00
Matthew Brown
8fc0b43973 Fix typecercion issues 2019-02-10 21:13:06 -05:00
Matthew Brown
0ec83a24d4 Fix docblocks cc @SignpostMarv 2019-02-10 20:57:22 -05:00
SignpostMarv
230821591a amending methods 2019-02-10 20:40:32 -05:00
SignpostMarv
60f9d3558c templating for ReflectionClass 2019-02-10 20:40:32 -05:00
Matthew Brown
c6b3fc512f Don’t throw exception when ignoring trait absence 2019-02-10 16:32:30 -05:00
Matthew Brown
af61e167f4 Add callable literal string
Fixes #1315
2019-02-10 16:27:37 -05:00
Matthew Brown
9a8f969d5c Fix #1314 - make sure we always know what a closure is if we’re using one 2019-02-10 16:23:31 -05:00
Matthew Brown
c58100e3af Fix #1313 - don’t allow mixed function calls 2019-02-10 16:15:52 -05:00
Matthew Brown
7a1ff78bb3 Fix #1316 - is_iterable should remove arrays from union 2019-02-10 15:56:35 -05:00
Matthew Brown
62fb8035bf Fix #1309 - no PropertyNotSetInConstructor warnings for grandchild of class 2019-02-10 15:01:10 -05:00
Matthew Brown
6976528c7e Fix #1310 - check template defining class matches 2019-02-10 12:02:18 -05:00
Matthew Brown
c765d0e969 Fix #1307 - improve generator array type 2019-02-09 15:48:15 -05:00
Matthew Brown
83e22a10f8 Fix #1299 - vars defined in catches before throw are possibly-defined for finally 2019-02-09 15:39:30 -05:00
Matthew Brown
574a5530ee Use $baselineFile for current baseline 2019-02-09 11:20:48 -05:00
Maria Luiza Soares
5bd16c686f Show total fixed errors when updating baseline 2019-02-09 11:20:48 -05:00
bugreportuser
6c7819b438 Allow @psalm-template for classes 2019-02-09 11:15:25 -05:00
Brown
c68209b8f3 Fix #1300 - add functions mentioned in class file where class is used 2019-02-08 17:41:03 -05:00
Matthew Brown
f4518d59e0 Fix #1303 - improve handling of class-string<Foo> type arg passed to class-string<T> param 2019-02-08 13:34:30 -05:00
Matthew Brown
98644f7a65 Allow more-specific template types to override mixed 2019-02-08 13:09:36 -05:00
Matthew Brown
6d0e78540a Only move issue once 2019-02-07 18:47:50 -05:00
Matthew Brown
0bca8db561 Don’t throw exception when property is missing type 2019-02-07 18:10:32 -05:00
Matthew Brown
e6f3948f7b Fix #1297 - prevent false positive TypeDoesNotContainType for class const array offset 2019-02-07 16:24:31 -05:00
Matthew Brown
ed4ed957c8 Use more specific templated argument 2019-02-07 15:21:34 -05:00
Matthew Brown
fbe5801345 Prevent issues being forgotten when another error crops up 2019-02-07 14:06:37 -05:00
Matthew Brown
c383e61805 Fix #1296 - array_filter should allow scalar values 2019-02-07 13:05:17 -05:00
Matthew Brown
17541b415f Fix #1191 - allow Psalm to check against different versions of PHP 2019-02-07 12:25:57 -05:00
Matthew Brown
f8f5ddfb04 Add support for string range 2019-02-07 10:50:42 -05:00
SignpostMarv
3de4457a45 adding type-hinting stub for array_chunk() 2019-02-06 16:43:22 -05:00
Matthew Brown
c758678022 Fix remaining issues 2019-02-06 16:08:41 -05:00
Matthew Brown
e7d73c3ff2 Fix generator ref 2019-02-06 16:08:41 -05:00
Aaron Piotrowski
e6fcb79392 Update ProtocolStreamReader 2019-02-06 16:08:41 -05:00
Matthew Brown
7249539fc6 Add a few return types and improve formatting 2019-02-06 16:08:41 -05:00
Matthew Brown
d18ef9c6e1 Add ideal stub return types 2019-02-06 16:08:41 -05:00
Aaron Piotrowski
b0d97843ce Update Amp usage
Fixed a few errors and used byte-stream for reading and writing.
2019-02-06 16:08:41 -05:00
Matthew Brown
263a4c8cf1 Use Amp for handling language server event loop 2019-02-06 16:08:41 -05:00
Matthew Brown
dfe45e7d26 Fix #1290 - improve handling of more specific template 2019-02-06 15:56:40 -05:00