- No longer consider
No namespaces linted.as a warning if:only-modified trueand the.eastwoodfile contains a valid timestamp.
- Upgrade
org.ow2.asm/asm-alltoorg.ow2.asm/asm.
- Exclude
data_readers.cljcfiles from the:no-ns-form-foundlinter.- Closes #447
- Make the
:def-in-deflinter omittable via thedisable-warningmechanism.- Closes #445
- Lint against incorrect usage of transients.
- Closes #441
- Upgrade
tools.namespace.- Closes #439
- Fix false positive for
clojure.spec.alpha/every.- Closes #435
- Fix false positive for
clojure.java.jdbc/with-db-connection.- Closes #436
- Correctly associate
:filemetadata when Eastwood analyzes a given var, for .cljc files.- Fairly minor bug, that would only affect people using Eastwood via a repl.
Improve :found-dir-supersets error reporting.
- Fail when inferred source paths overlap with each other.
- Closes #428
- Compatibility with the Clojure 1.11.0-alpha4, which has some news since alpha3.
- Also accept
:thenas a constant test incond->/cond->>.
- Compatibility with the Clojure 1.11.0 series.
- tools.namespace integration: don't lint namespaces inferred from the
refresh-dirsthat were not specified as Eastwood config/arguments to be linted. - Fail more clearly if/when loading tools.namespace
refresh-dirs.- Closes #423
- Fix false positive for
alt!!- Closes #422
- Fix
:source-pathsinference.
- Implement a new linter:
:performance.- Note that it's disabled by default. There are no drawbacks to enabling it (other than the burden of having to fix or silence these).
- Closes #416
- Documentation
- Add
:kinds to all remaining linters.- Documentation
- Closes #418
- Improve Eastwood performance substantially.
- Various redundant work is avoided or DRYed.
- Various operations are now (safely) parallelized and cached.
- Caching works on a per-run manner, so separate invocations from REPL will remain isolated from one another.
- Deprecate
:parallel?option.- It has never been a safe option; it was removed from the README some time ago.
- Now if passed, it will fallback to non-parallel code analysis.
- A few other things are parallel in Eastwood: from parsing projects, to running linters.
- Handle
:refer-clojure :excludebetter in:suspicious-test.- Closes #185
- Prevent occasional issues related to ns-interns when using Eastwood from a REPL.
- Closes #419
- var-info.edn: mark various side-effectful fns as such.
- This silences a few
:unused-ret-valsfalse positives. - Fixes #421
- This silences a few
- Exclude Lein checkouts' directories from the inferred
:source-paths(source path inference being Eastwood's fallback to a lack of explicitly specified:source-paths/:test-paths).
- Implement ability to omit a specific linter
:kind.- Closes #387
- Documentation
- Now the
:second-arg-is-not-stringsub-kind for the:suspicious-testis disabled by default.- Rationale: #387
- You can re-enable it by passing
:exclude-linters #{} - Learn more about sub-kind silencing
- Silence
:wrong-arityfalse positives for honeysql the time being.- Part of #399
- Fix various false positives which could arise when using the
clojure.core.async/gomacro.- Fixes #411
- Upgrade
tools.reader
- Honor
:exclude-namespacesfor the:reflectionand:boxed-mathlinters.
- deps.edn integration: don't lint files under
~/.gitlibs.- These files represent third-party dependencies, so while they should be taken into account for analysis, typically the shouldn't be linted.
- Closes #409
- Fix a NullPointerException.
- Fix integration of the
:reflectionlinter with the:ignored-faultsmechanism.
- Fix an implementation detail which could throw exceptions over .cljc files.
- Silence a
printlnover a certain code path. - Improve
:reflectionlinter for an edge case related to .cljc files.
- Implement a new linter:
:reflection - Implement a new linter:
:boxed-math - Enable and refine
:non-dynamic-earmuffs- See https://github.com/jonase/eastwood#non-dynamic-earmuffs
- It used to be disabled by default.
- Now It lints for both missing earmuffs and missing
^:dynamicmetadata.
- Consider
doallside-effectful (for the:unused-ret-valslinter). - Omit the
:no-ns-form-foundlinter for Eastwood config files.- Closes #406
- Analyze files in topographical order.
- This generally happens naturally, but now is emphasized.
- This way, it is less likely that
defprotocolanalysis causes issues. - Closes #407
- Linter warnings ultimately coming from third-party macroexpansions (that is, the given macro resides outside
src/test/or such) will be silenced, for most linters where doing so is low-risk.- This way, Eastwood defaults to linting your code, not code from your dependencies.
- You can revert to the old behavior by setting the
:ignore-faults-from-foreign-macroexpansions? falseglobal option. - Closes #394
- Fix a NullPointerException.
- Closes #404
- One now can override the exit code with the
:forced-exit-code 0option.- That can be helpful when wanting to see the results of linting merely for informative purposes.
- Now
:unused-ret-vals/:unused-ret-val-on-trydon't trigger warnings so easily for static method calls.- For static method calls (i.e. Java interop), these linters are based on a hardcoded list (
jvm-method-info.edn) describing their side-effects. Now, if a method isn't found in said list it will be considered side-effectful, favoring false negatives over false positives.
- For static method calls (i.e. Java interop), these linters are based on a hardcoded list (
- Now
:unused-ret-vals/:unused-ret-val-on-tryalso lint instance method calls.- Before, they only linted static method calls (aside from vanilla Clojure calls/exprs)
- Similarly to the previous bullet point, these new linters won't fail easily in face of missing method information.
- Now the
:deprecationslinter won't emit faults if the deprecated defn and a given consumer defn belong to the same ns.- Closes #402
- Fix false positive
:unused-ret-valsforclojure.core/read- Closes #403
- Omit exceptions coming from individual top-level forms, if they made use of the
clojure.core.async/gomacro.- Closes #395
- This makes Eastwood more capable of analyzing core.async -based projects. It's a temporary measure though, as it ideally this would be simply fixed in the tools.analyzer project.
- You can revert to the old behavior (which most likely will result in errors) by passing
:abort-on-core-async-exceptions? trueas a top-level Eastwood option.
- Don't exit succesfully when no namespaces were linted.
- This could happen on misconfigured
:source-paths, etc. - Closes #400
- This could happen on misconfigured
- Make the
:wrong-aritylinter omittable via thedisable-warningmechanism.
- Fix the
eastwood.lint-mainprogram when invoked with no arguments. - Support
(class (byte-array 0))as anextend-protocoltarget without it triggering:wrong-tag.
- Fix false positives for
some->,some->>- Closes #397
- Fix an implementation detail which could throw exceptions over .cljc files.
- Make the
:constant-testlinter available forif-some,when-some - Closes #110
- Update var-info.edn
- This increases overall accurancy.
- Closes #236
- Make the
:unused-fn-argslinter omittable via thedisable-warningmechanism- Reminder: this linter is disabled by default anyway.
- Make the
:unused-fn-argslinter play better with multimethods- Closes #1
- Consistently use punctuation in linting messages
- Closes #146
- Make the
:implicit-requireslinter work corectly in presence of dynamicrequireforms- Closes #22
- Fix a false positive for
letdestructuring- Closes #383
- Fix a false positive for
extend-protocol- Closes #385
- Support Manifold's
let-flow- Closes #197
- Fix various false positives
- These could be triggered, under certain conditions, by
are,with-out-str, some external libraries, etc.
- These could be triggered, under certain conditions, by
- Now the
:wrong-taglinter can also be configured via thedisable-warningmechanism.- Related: the
disable-warningsthat Eastwood ships by default now prevent false positives against the speced.def lib.
- Related: the
- Now the
:suspicious-testlinter can also be configured via thedisable-warningmechanism.- Relatedly, a certain pattern of usage of the
clojure.test/aremacro now does not trigger a linter fault.
- Relatedly, a certain pattern of usage of the
- Now the
:unused-meta-on-macrolinter can also be configured via thedisable-warningmechanism.- Closes #303
- If you invoke
eastwood.lint/eastwoodprogramatically, now a new key is offered::some-errors, akin to:some-warnings.- This allows to distinguish why did Eastwood fail.
- Fix false positive
unused-ret-vals-in-tryforclojure.test- Fixes #206
- Fix false positive
suspicious-expressionforclojure.test/is- Fixes #207
- Support
clojure.test/assert-exprbetter- Fixes #313
- Vanilla
defns having:testmetadata don't result in false positives for the:bad-arglistslinter anymore.
- Introduce
:ignored-faultsoption - Default to linter parallelism
- Linter parallelism (as opposed to the
:parallelism?option, which affects analysis/evaluation) is thread-safe. - Fixes #339
- Linter parallelism (as opposed to the
- Improve compatibility with Leiningen higher-order tasks, plugins, etc
- Fixes #244
- Improve compatibility with forms defined with
^:const- Fixes #341
- Improve compatibility with CIDER
- Fixes #298
- Improve compatibility with large defprotocols
- Fixes #191
- Support require+import pattern for defrecords, without triggering "Namespace is never used"
- Fixes #210
- Remove a noisy println, on certain cases that would be already caught by the reflection warnings mechanism.
- Fixes #355
- Restore accidentally-dropped support for Clojure < 1.10
- Fixes #356
- Drop support for Clojure 1.6
- Improve
:implicit-dependenciesto support potemkin/import-vars
- Fix
:rethrow-exceptions?option which could try to hash-map - Keep order for
:namespacesoption
- Introduce
:rethrow-exceptions?option, which offers throwing any encountered exceptions during analysis/linting instead of only reporting them. You might want this if using Eastwood programatically.
- Add
set-linter-executor!configuration option
- Fix pre-post warning for dynamic vars
- Fix memory leak on repeated runs
- Add support for files with tagged literals using custom data readers
- Add support for only linting changed files since last run.
This feature is to be considered alpha. If passed
:only-modifiedwith the value true, Eastwood will only lint the files which are modified since the timestamp stored in.eastwood
- Add support for parallelism. First shot is
:naivewhich runspmapover the namespaces.
- Disable
:redefd-varswarning for mount'sdefstate
- Add
:implicit-dependencieslinter - Fix
:constant-testwarning on macro expansion ofclojure.spec'scoll-of
- Eastwood now drops support for leiningen 1.x
- Fix warnings on clojure macro expansions for
as->andcoll-of
The main changes with version 0.2.5 are for improving how Eastwood
works with Clojure 1.9.0, and eliminating false positives when using
the :unused-namespaces linter.
Thanks to contributions from Daniel Compton, Derek Passen, Emlyn Corrin, and Reid McKenzie.
No new linters.
-
Updated version of tools.reader adds support for new syntax in Clojure 1.9.0-beta2, e.g. map namespace syntax, Issue #228 #201
-
Eliminate some common
:suspicious-expressionwarnings due to how someclojure.specmacros such aseveryandandare implemented. Issue #227. There are likely further improvements that can be made in this area in the future. -
:unused-namespaceslinter has been significantly improved, in that it gives far fewer false positive warnings. Issue #200 #211 #186 -
Eliminate warnings when running with Clojure 1.9.0 for conflict with new functions in core like boolean? and uri? Issue #232 #233
-
Eliminate new warnings that appeared with Clojure 1.9.0 defrecord performance improvement, because Eastwood was using internal details that changed. Issue #231
-
New version of leinjacker allows Eastwood to be invoked via
leincommand line for Leiningen projects that use managed dependencies. Issue #230 -
Eliminate some unwanted debug messages when
clojure.spec/assertis used inside of function preconditions. Issue #219 -
Eliminate some false
:non-dynamic-earmuffswarnings. Issue #213
No new linters. Added initial support for .cljc files and reader conditionals.
-
Read .cljc files in addition to .clj files when scanning namespaces.
-
Handle reader conditionals by always parsing the :clj branch.
-
Allow ClojureScript-specific libspec entries, such as
:include-macros true.
Internal enhancements:
-
Updated versions of tools.analyzer, tools.reader, tools.namespace, core.memoize, and clojure.java.classpath.
-
Updated documentation, cleaned up comments, and removed unused require statements.
No new linters. The only difference with 0.2.2 is a few bug fixes:
-
Ignore the contents of any file
data_readers.cljin any directory of your classpath. Earlier versions of Eastwood would lint their contents, and by default complain that there was nonsform at the beginning. There should not be annsform in such a file, and Eastwood no longer issues such incorrect warnings. Issue #172. -
Eliminate an exception caused by Eastwood's
unused-ret-valsandunused-ret-vals-in-trylinters that could occur if a Java method cannot be resolved. Issue #173.
New linter:
- New linter
:wrong-pre-postthat warns about several kinds of wrong or suspicious preconditions or postconditions in a function. link. Issue #89.
Other enhancements and bug fixes:
-
Updates to support Clojure 1.8.0-RC1.
-
Picture of Clint Eastwood in the README.
-
Warn when a record field and function name are identical. This was actually implemented in an earlier version of Eastwood, but I did not notice that until now. Issue #55.
-
Several fixes to the bad-arglists linter.
-
Change keyword-typos linter so that it no longer warns if the only difference between two keywords is the presence or absence of an initial underscore character. Issue #163.
-
If you use the APIs to invoke Eastwood that return a map of info about each warning, there is a new :warning-details-url key that gives a link to the Eastwood documentation giving more detail about each type of warning. Issue #105.
-
Eliminate exception thrown when linting byte-streams library. Issue #120.
-
Disable unused-ret-vals warnings inside Potemkin's import-vars macro. Issue #135.
Internal enhancements:
-
Correct the output put into debug file forms-emitted.txt. Issue #136.
-
Updated versions of tools.analyzer, tools.analyzer.jvm and several other libraries used by Eastwood. The current version of these should always be visible in the file clone.sh
There were changes in the way the 'defn' macro was implemented in Clojure 1.8.0-RC1 that caused the tools.analyzer ASTs (abstract syntax trees) to differ when analyzing Clojure code. Eastwood 0.2.1 and earlier did not gracefully handle those changes, causing the warnings issued for the same Clojure project to differ significantly when using Clojure 1.8.0-RC1 instead of an earlier version of Clojure, most noticeably for misplaced doc strings and wrong tag warnings. Hopefully all of these issues have been eliminated with Eastwood 0.2.2.
If you use Emacs+Cider or Eclipse+Counterclockwise development environments, there are now add-ons that integrate Eastwood warnings. See https://github.com/jonase/eastwood#editor-support
New linters, and new good warnings from existing linters:
-
New linter
:wrong-ns-formthat warns about several kinds of wrong or suspicious:requireor:usesubforms insidensforms. Issue #85, #98 -
:suspicious-expressionlinter now warns about trivial uses of moreclojure.coremacros then before.
Fewer unwanted warnings, via logic enhancements or configuration options:
-
Several linters now have configuration options to disable their warnings based upon whether the warnings occur inside of a macroexpansion of a particular macro. By default, Eastwood loads several config files worth of such disabling options for the linters
:constant-test,:redefd-vars,:suspicious-expression, and:unused-ret-valsthat prevent them from generating many unwanted warning messages, at least when certain macros are used, such as those incore.contracts,core.match,core.typed, Korma, Carmine, Timbre, Instaparse, and Schema. Eastwood users may write their own config files to disable more warnings. Issue #45, #96, #108, #111, #118, #122, #123 -
The
:wrong-aritylinter now generates nearly no unwanted warnings when you use thejava.jdbcand Hiccup libraries. Those libraries modify the:arglistskey in metadata of some of their functions and macros for documentation purposes, but in a way that fooled Eastwood into generating incorrect warnings. Like the previous item, this is also configurable, and Eastwood users may extend these configurations for their own situations. Issue #119, #124 -
Limited documentation for how to specify these new config files, plus links to the current ones, where one might learn from the current example configs. This documentation should expand in the future.
-
The
:unused-namespaceslinter had several bugs causing it to report a namespace that wasrequired orused as being unused, when in fact it was. The only remaining case of such unwanted warnings is at least documented. Issue #25 -
:suspicious-testlinter now correctly infers in more cases when the last argument toclojure.test/isis a string, eliminating some incorrect warnings. Issue #117
Other enhancements:
-
:constant-testwarning messages now include the expression in which the constant test expression was found. In some cases where the expression is inside of a macro expansion, this can give more clues about the cause of the constant test. -
When reflection or boxed math warnings are enabled and the Clojure compiler prints them during Eastwood's
evaling of your code, Eastwood will recognize them and change their format to match that of Eastwood's own warnings, so that they may be stepped through in editors in the same way as other Eastwood warnings. Note that any such warnings produced when Leiningen is loading other namespaces, before Eastwood analysis begins, are outside of Eastwood's knowledge or control, and are thus not modified. -
New
eastwood.lint/lintfunction intended for use by developers integrating Eastwood with editors and IDEs. Issue #131 -
When specifying lists of linters to use in Eastwood options, can now use the keyword
:allas an abbreviation for all linters, or:defaultfor all linters enabled by default. Issue #130 -
If code uses the values of
&envin a macro expansions, which causes Eastwood to throw an exception, it now recognizes that exception message and gives a message that explains a little more clearly why the exception occurred, with links to the documentation. -
Documentation of how Eastwood's options map is created from Leiningen configuration files and the command line, plus a new debug option
:optionsto show what the options are at several steps of the process. Issue #125 -
Invoking
lein help eastwoodfrom the command line now prints some help, plus link to the full documentation. -
:debugkey value in Eastwood options map can now be a list or vector, to avoid the need to type the#character as part of the set literal syntax.
Internal Eastwood test/development enhancements:
-
Enhancements to Eastwood's tests to make it easier to update expected results to match actual results.
-
Update projects in Eastwood's test suite (the "crucible") to include newer versions of
core.logicand Elastisch.
-
Eastwood version 0.2.0 requires Clojure 1.5.0 or later. Clojure 1.4.0 is no longer supported.
-
The new default lint warning format is no longer a map, but lines of the form "FILE:LINE:COL: LINTER MSG". You can put only the warnings lines into a file using the new option
:out. Support already exists in Emacs, Vim, and probably other editors for stepping through the warnings, with another buffer/window jumping to the location of the warning for you. See docs for more details. Issue #104. -
Enhanced
:suspicious-expressionlinter so it always uses macroexpanded forms, not original source forms. Thus it no longer produces incorrect warnings for expressions using->or->>like(-> 1 (= 1)), as it used to. Issue #93. -
New linter
:constant-testthat warns when a test expression in anif,cond,if-let, etc. is obviously a constant, or a literal collection that will always evaluate as true. Issue #77. -
New linter
:unused-meta-on-macrothat warns when metadata is used to annotate a macro invocation, but the Clojure compiler will ignore it because it is discarded during macro expansion. Issue #97. -
New linter
:unused-localsthat warns when aletbinds values to symbols, but those symbols are never used. Disabled by default. Issue #106. -
New linter
:no-ns-form-foundthat warns about each Clojure file found where Eastwood could not find annsform. Most likely that is because there is none, but more unusually there could be annsform that is nested inside of another top level form. -
New linter
:non-clojure-filethat warns about each non-Clojure file found in your:source-pathsor:test-paths, if you specify those in the list of namespaces to lint, or leave them there as the default. Issue #102. -
Corrections to the
:wrong-taglinter where it was throwing exceptions while linting some projects -- ones that had not been tested before Eastwood 0.1.5 release. -
Updated the
:unused-private-varslinter so that it should be correct in more cases, and have better line number info. -
Corrected a case where
:unlimited-usewarnings were still being issued for the namespaceclojure.test, which was(:use [clojure test]). Issue #95. -
For namespace / file name consistency check error messages, made the message a little clearer for common special case of file name having '-' characters instead of '_'. Issue #103.
-
Improved line/column location info for a few
:unused-ret-valwarnings. -
Updated versions of several libraries used:
tools.analyzer0.6.3 + a few commits,tools.analyzer.jvm0.6.4 + a few commits,core.memoize0.5.6 + a few commits,core.cache0.6.4. Issues: #100. -
Added several projects to the 'crucible' set of projects on which Eastwood is regularly tested: Instaparse, Schema, Plumbing, Carmine, Compojure.
-
New linter
:local-shadows-varthat warns if a local name (e.g. a function argument or let binding) has the same name as a global Var, and is called as a function. This is sometimes a mistake. Issue #81. -
New linter
:wrong-tagthat warns for some kinds of erroneous type tags. For example, a primitive type tag like^intor^byteson a Var name beingdef'd ordefn'd should be given as^{:tag 'int}instead. Also it is best if Java class names outside of thejava.langpackage are fully qualified when used to hint the return type of a function on its argument vector. Introducing this linter depends upon changes totools.analyzer.jvmthat no longer throw exceptions when linting source code with these problems. Issue #37. -
New API for running Eastwood from a REPL session, nearly identical to what is available from the command line. This should be used with caution due to problems that might result if you run Eastwood multiple times from the same REPL session, because it reloads and re-evaluates your code each time. Issue #56.
-
The default behavior is now to stop analyzing namespaces after the first exception thrown during analysis or evaluation. The new option
:continue-on-exceptioncan be set to true to force the old behavior. The new stopping behavior prevents some spurious warnings about undefined Vars that can be confusing to users. Issue #79. -
:unlimited-usewarnings are no longer issued for the namespaceclojure.test. It is very common for Clojure developers to have(:use clojure.test)in test namespaces. Issue #95. -
:suspicious-expressionwarnings are no longer issued for forms inside quote forms. Issue #74. -
The warning messages for linters
:unused-fn-argsand:unused-ret-valshave changed slightly to remove details that were not easy to continue to provide with the newesttools.analyzerlibraries. On the plus side, some of the line and column numbers are now more precise than they were before with those linters, and also for the:suspicious-testlinter. -
Lint warning maps contain a new key
:uri-or-file-name, which has the advantage of making it easier to know the exact directory of the file being linted when the warning was found, including the directory of your classpath that the file is in (the:filename string is relative to the classpath the file is in). The value of:uri-or-file-nameis either: (a) a string with the relative path name to the file containing the namespace being linted when the warning was found (relative to where thelein eastwoodcommand was run, (b) the absolute full path name if the file is not beneath the current directory, or (c) a URI like the following if it is a namespace inside of a JAR file:#<URI jar:file:/Users/jafinger/.m2/repository/org/clojure/clojure/1.6.0/clojure-1.6.0.jar!/clojure/test/junit.clj> -
Eliminated an exception thrown when running the
:suspicious-testlinter on forms like(clojure.test/is ((my-fn args) more-args)), with an expression(my-fn args)instead of a symbolmy-fnas the first item. Issue #88. -
Eastwood 0.1.4, and perhaps a few earlier versions as well, unintentionally 'hid' exceptions thrown by the Clojure compiler while doing
eval. Such exceptions are now made visible to the user, which makes errors occur earlier, and closer to the actual source of the problem. -
Updated versions of several libraries used:
tools.analyzer0.6.2,tools.analyzer.jvm0.6.3,tools.reader0.8.10,tools.namespace0.2.7 -
Added some new utility/debug functions for showing ASTs trimmed of unwanted data, and sorting the keys in orders that put the most important values early.
-
Made some Eastwood code simultaneously simpler, shorter, and more reliable by using a
tools.analyzer(.jvm)enhancement that preserves the original forms of code that goes through macro expansion. Issue #71. -
Modified
pprint-ast-nodeto avoid an infinite loop for ASTs of code containingdefprotocolforms. Issue #90. -
Extensive internal plumbing changes: replace many
printlncalls with a probably-too-complex callback function instead. The hope is that this will make it easier for IDE developers to invoke Eastwood and control where the different kinds of output go, and get more of it as Clojure data rather than strings.
-
Only report
:suspicious-testwarnings for(is ...)forms if theisrefers to the one defined inclojure.test. This is especially helpful to users ofcore.typed, which defines its own meaning for(is ...)forms. These often caused false warnings with previous Eastwood versions. Issue #63. -
No longer report
nilvalues as:unused-ret-valswarnings if they arise due to the expansion ofgen-classorcommentmacros. Issue #39. -
Improved precision of
:lineand:columnvalues in:unlimited-usewarnings. -
Several small changes while working towards being able to lint the
core.typedClojure contrib library. First was an algorithmic speedup from exponential to linear time intools.namespacedependency analysis, which was only first noticed withcore.typed's inter-namespace dependencies. Second was creating all namespaces before beginning linting, to handle an unusual occurrence ofaliasin namespaceBto namespaceA, whereArequiredB. More work still needed here. -
Updated
tools.analyzerandtools.analyzer.jvmto version 0.2.2. -
:debugoption:nswas removed when introducing the use oftools.analyzer.jvm/analyze+eval. It may be added back in again later. Other debug options were temporarily removed, then added back in, although in some cases forms are now pprint'ed without metadata keys such as:column,:end-line,:end-column, and:file, for brevity.
-
Added file name to all linter warnings. Issue #64.
-
Added column numbers to :redefd-vars warnings.
-
Handle "./" at beginning of :source-paths or :test-paths dir names. Fixes issue #66.
-
Most of the Clojure contrib libraries upon which Eastwood depends are now copied into Eastwood itself, and then renamed to have different namespace names. This helps to avoid potential conflicts between the version used by Eastwood, and the version used by Clojure projects being linted. Fixes issue #67.
-
Updated
tools.analyzerandtools.analyzer.jvmto version 0.1.0-beta13. -
Updated
data.priority-mapto 0.0.5, andcore.memoizeto 0.5.6 plus a local patch, both to avoid spurious reflection warnings from Eastwood itself. -
Added :compare-forms debug option, only intended for use by Eastwood developers for debugging Eastwood itself. Causes Eastwood to write two files forms-read.txt and forms-emitted.txt. forms-read.txt contains the forms after they have been read, top-level do forms are recognized and each subform analyzed separately, and after calling macroexpand-1 on them, at the top level only. forms-emitted.txt contains the forms after all of those steps, plus being analyzed with tools.analyzer(.jvm) to produce an AST, and then emit-form called on the AST to produce a form.
-
Updated
tools.analyzerandtools.analyzer.jvmto version 0.1.0-beta10. Most of the Eastwood issues fixed since Eastwood 0.1.1 were due to this change. -
Changed method of analyzing code that was throwing exception with some projects, e.g. kria. Fixes issue #60, and I think this same fix also corrected issue #54
-
Fixed analysis problem that caused Eastwood to throw exceptions when analyzing Midje, and test code of libraries that used Midje. Fixes issue #61
-
New functions and macros added to Clojure 1.6.0 will now cause :unused-ret-vals or :unused-ret-vals-in-try warnings if they are called and their return value is ignored, just as that happens for other functions in clojure.core. Fixes issue #59
-
Updates to scripts and files used to test Eastwood, of interest only to Eastwood developers. Now it is straightforward to ensure that you get the same version of project source code if you use the test scripts on multiple machines, instead of getting whatever the latest happened to be at the time you ran the clone.sh script.
-
Added consistency checking between namespace and file names before actual linting begins, to avoid hard-to-understand error messages that could otherwise result. See this section in the docs.
-
Added
:bad-arglistslinter. See this section in the docs. -
No longer issue warnings for code inside of
commentforms. Fixes issue #47 -
lein helpnow gives one-line description of Eastwood plugin, andlein eastwood helpgives a link to the full documentation, and help about the same as that in the "Installation & Quick Usage" section. -
Reflection warnings appearing in output of
lein eastwoodshould now be much closer to those produced by Clojure itself, and usually include useful line:column numbers. There may still be some differences, so reflection warnings in the output oflein checkare still the ones you want to trust, if there are any differences. -
Updated
tools.analyzerandtools.analyzer.jvmto version 0.1.0-beta8. Updated some Eastwood code as a result of changes in those libraries. (Eastwood version 0.1.0 used version 0.1.0-alpha1 of those libraries). -
Top level
doforms are now analyzed by Eastwood similarly to how Clojure itself does it, as if the forms inside thedowere themselves independent top level forms. See the article "in which the perils of the gilardi scenario are overcome" for some description of why Clojure does this. Fixes issue #49 -
Correctly detect
gen-interfaceforms even if invoked usingclojure.core/gen-interface. Link to the commit. -
Updates to scripts and files used to test Eastwood, of interest only to Eastwood developers.