[Git][clojure-team/tools-analyzer-clojure][upstream] New upstream version 1.1.1

Jérôme Charaoui (@lavamind) gitlab at salsa.debian.org
Thu Feb 2 03:25:19 GMT 2023



Jérôme Charaoui pushed to branch upstream at Debian Clojure Maintainers / tools-analyzer-clojure


Commits:
fc08c9d8 by Jérôme Charaoui at 2023-02-01T18:15:52-05:00
New upstream version 1.1.1
- - - - -


19 changed files:

- + .github/PULL_REQUEST_TEMPLATE
- CHANGELOG.md
- CONTRIBUTING.md
- + LICENSE
- README.md
- pom.xml
- project.clj
- src/main/clojure/clojure/tools/analyzer.clj
- src/main/clojure/clojure/tools/analyzer/ast.clj
- src/main/clojure/clojure/tools/analyzer/ast/query.clj
- src/main/clojure/clojure/tools/analyzer/env.clj
- src/main/clojure/clojure/tools/analyzer/passes.clj
- src/main/clojure/clojure/tools/analyzer/passes/add_binding_atom.clj
- src/main/clojure/clojure/tools/analyzer/passes/elide_meta.clj
- src/main/clojure/clojure/tools/analyzer/passes/uniquify.clj
- src/main/clojure/clojure/tools/analyzer/passes/warn_earmuff.clj
- src/main/clojure/clojure/tools/analyzer/utils.clj
- src/test/clojure/clojure/tools/analyzer/core_test.clj
- src/test/clojure/clojure/tools/analyzer/query_test.clj


Changes:

=====================================
.github/PULL_REQUEST_TEMPLATE
=====================================
@@ -0,0 +1,14 @@
+Hi! Thanks for your interest in contributing to this project.
+
+Clojure contrib projects do not use GitHub issues or pull requests, and
+require a signed Contributor Agreement. If you would like to contribute,
+please read more about the CA and sign that first (this can be done online).
+
+Then go to this project's issue tracker in JIRA to create tickets, update
+tickets, or submit patches. For help in creating tickets and patches,
+please see:
+
+- Contributing FAQ: https://clojure.org/dev
+- Signing the CA: https://clojure.org/dev/contributor_agreement
+- Creating Tickets: https://clojure.org/dev/creating_tickets
+- Developing Patches: https://clojure.org/dev/developing_patches


=====================================
CHANGELOG.md
=====================================
@@ -1,5 +1,18 @@
 Changelog
 ========================================
+* next
+  * Remove JVM-specific code to make this usable for ClojureCLR
+* Release 1.1.0 on 14 Sep 2021
+  * TANAL-134: Remove :init from :def's :children when absent
+  * Added :refer-clojure :exclude for `update-keys` and `update-vals` being added in Clojure 1.11
+* Release 1.0.0 on 18 Feb 2020
+  * Fixed docstrings
+* Release 0.7.0 on 10 Dec 2018
+  * Handle injected locals in add-binding-atom phase
+* Release 0.6.9 on 9 Jun 2015
+  * Exclude `boolean?` from clojure.core
+* Release 0.6.7 on 3 Nov 2015
+  * Don't elide significant 'quote
 * Release 0.6.6 on 23 Apr 2015
   * Fix emit-form for :host-field
 * Release 0.6.5 on 23 Feb 2015


=====================================
CONTRIBUTING.md
=====================================
@@ -3,12 +3,10 @@ This is a [Clojure contrib] project.
 Under the Clojure contrib [guidelines], this project cannot accept
 pull requests. All patches must be submitted via [JIRA].
 
-See [Contributing] and the [FAQ] on the Clojure development [wiki] for
+See [Contributing] on the Clojure website for
 more information on how to contribute.
 
-[Clojure contrib]: http://dev.clojure.org/display/doc/Clojure+Contrib
-[Contributing]: http://dev.clojure.org/display/community/Contributing
-[FAQ]: http://dev.clojure.org/display/community/Contributing+FAQ
-[JIRA]: http://dev.clojure.org/jira/browse/TANAL
-[guidelines]: http://dev.clojure.org/display/community/Guidelines+for+Clojure+Contrib+committers
-[wiki]: http://dev.clojure.org/
+[Clojure contrib]: https://clojure.org/community/contrib_libs
+[Contributing]: https://clojure.org/community/contributing
+[JIRA]: https://clojure.atlassian.net/browse/TANAL
+[guidelines]: https://clojure.org/community/contrib_howto


=====================================
LICENSE
=====================================
@@ -0,0 +1,205 @@
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation
+   distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+    i) changes to the Program, and
+   ii) additions to the Program;
+
+   where such changes and/or additions to the Program originate from and are
+   distributed by that particular Contributor. A Contribution 'originates'
+   from a Contributor if it was added to the Program by such Contributor
+   itself or anyone acting on such Contributor's behalf. Contributions do not
+   include additions to the Program which: (i) are separate modules of
+   software distributed in conjunction with the Program under their own
+   license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+  a) Subject to the terms of this Agreement, each Contributor hereby grants
+     Recipient a non-exclusive, worldwide, royalty-free copyright license to
+     reproduce, prepare derivative works of, publicly display, publicly
+     perform, distribute and sublicense the Contribution of such Contributor,
+     if any, and such derivative works, in source code and object code form.
+  b) Subject to the terms of this Agreement, each Contributor hereby grants
+     Recipient a non-exclusive, worldwide, royalty-free patent license under
+     Licensed Patents to make, use, sell, offer to sell, import and otherwise
+     transfer the Contribution of such Contributor, if any, in source code and
+     object code form. This patent license shall apply to the combination of
+     the Contribution and the Program if, at the time the Contribution is
+     added by the Contributor, such addition of the Contribution causes such
+     combination to be covered by the Licensed Patents. The patent license
+     shall not apply to any other combinations which include the Contribution.
+     No hardware per se is licensed hereunder.
+  c) Recipient understands that although each Contributor grants the licenses
+     to its Contributions set forth herein, no assurances are provided by any
+     Contributor that the Program does not infringe the patent or other
+     intellectual property rights of any other entity. Each Contributor
+     disclaims any liability to Recipient for claims brought by any other
+     entity based on infringement of intellectual property rights or
+     otherwise. As a condition to exercising the rights and licenses granted
+     hereunder, each Recipient hereby assumes sole responsibility to secure
+     any other intellectual property rights needed, if any. For example, if a
+     third party patent license is required to allow Recipient to distribute
+     the Program, it is Recipient's responsibility to acquire that license
+     before distributing the Program.
+  d) Each Contributor represents that to its knowledge it has sufficient
+     copyright rights in its Contribution, if any, to grant the copyright
+     license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+  a) it complies with the terms and conditions of this Agreement; and
+  b) its license agreement:
+      i) effectively disclaims on behalf of all Contributors all warranties
+         and conditions, express and implied, including warranties or
+         conditions of title and non-infringement, and implied warranties or
+         conditions of merchantability and fitness for a particular purpose;
+     ii) effectively excludes on behalf of all Contributors all liability for
+         damages, including direct, indirect, special, incidental and
+         consequential damages, such as lost profits;
+    iii) states that any provisions which differ from this Agreement are
+         offered by that Contributor alone and not by any other party; and
+     iv) states that source code for the Program is available from such
+         Contributor, and informs licensees how to obtain it in a reasonable
+         manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+  a) it must be made available under this Agreement; and
+  b) a copy of this Agreement must be included with each copy of the Program.
+     Contributors may not remove or alter any copyright notices contained
+     within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution,
+if
+any, in a manner that reasonably allows subsequent Recipients to identify the
+originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore,
+if a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits and
+other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such Commercial
+Contributor in connection with its distribution of the Program in a commercial
+product offering. The obligations in this section do not apply to any claims
+or Losses relating to any actual or alleged intellectual property
+infringement. In order to qualify, an Indemnified Contributor must:
+a) promptly notify the Commercial Contributor in writing of such claim, and
+b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement
+negotiations. The Indemnified Contributor may participate in any such claim at
+its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If
+that Commercial Contributor then makes performance claims, or offers
+warranties related to Product X, those performance claims and warranties are
+such Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using
+and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the
+risks and costs of program errors, compliance with applicable laws, damage to
+or loss of data, programs or equipment, and unavailability or interruption of
+operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
+LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of the
+remainder of the terms of this Agreement, and without further action by the
+parties hereto, such provision shall be reformed to the minimum extent
+necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+(excluding combinations of the Program with other software or hardware)
+infringes such Recipient's patent(s), then such Recipient's rights granted
+under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue
+and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to
+time. No one other than the Agreement Steward has the right to modify this
+Agreement. The Eclipse Foundation is the initial Agreement Steward. The
+Eclipse Foundation may assign the responsibility to serve as the Agreement
+Steward to a suitable separate entity. Each new version of the Agreement will
+be given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version of the
+Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly
+stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
+licenses to the intellectual property of any Contributor under this Agreement,
+whether expressly, by implication, estoppel or otherwise. All rights in the
+Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial in
+any resulting litigation.
+
+


=====================================
README.md
=====================================
@@ -2,6 +2,8 @@
 
 An analyzer for host agnostic Clojure code, written in Clojure and producing AST in EDN.
 
+I gave a talk on tools.analyzer[.jvm] at ClojureX in December 2015. Video [here](https://www.youtube.com/watch?v=oZyt93lmF5s)
+
 Timothy Baldridge gave a talk on tools.analyzer[.jvm] at Clojure/West in
 March 2014. Video
 [here](https://www.youtube.com/watch?v=KhRQmT22SSg&list=PLZdCLR02grLp__wRg5OTavVj4wefg69hM&index=11).
@@ -17,7 +19,7 @@ Currently the following platform specific analyzers written on top of tools.anal
 * [Developer Information](#developer-information)
 * [License](#license)
 
-[Quickref](http://clojure.github.io/tools.analyzer/spec/quickref.html)
+[Quickref](https://clojure.github.io/tools.analyzer/spec/quickref.html)
 ========================================
 
 ## Example Usage
@@ -146,7 +148,7 @@ clojure.tools.analyzer.jvm> (ast/update-children (analyze '(do 1 (+ 1 2) :foo))
   ...},
  ...}
 ```
-If it's desiderable to walk all the AST applying a function to all the nodes and the children nodes, one of `walk`, `prewalk` or `postwalk` should be used, read the docstrings of the three functions to understand the differences.
+If it's desirable to walk all the AST applying a function to all the nodes and the children nodes, one of `walk`, `prewalk` or `postwalk` should be used, read the docstrings of the three functions to understand the differences.
 Here's the previous example using `prewalk` instead of `update-children`:
 ```clojure
 clojure.tools.analyzer.jvm> (ast/prewalk (analyze '(do 1 (+ 1 2) :foo))
@@ -184,7 +186,7 @@ Since version `0.6.0`, passes can be scheduled automatically using `clojure.tool
 
 ## SPONSORSHIP
 
-* Cognitect (http://cognitect.com/) has sponsored tools.analyzer development (https://groups.google.com/d/msg/clojure/iaP16MHpX0E/EMtnGmOz-rgJ)
+* Cognitect (https://cognitect.com/) has sponsored tools.analyzer development (https://groups.google.com/d/msg/clojure/iaP16MHpX0E/EMtnGmOz-rgJ)
 * Ambrose BS (https://twitter.com/ambrosebs) has sponsored tools.analyzer development in his typed clojure campaign (http://www.indiegogo.com/projects/typed-clojure).
 
 ## YourKit
@@ -193,30 +195,29 @@ YourKit has given an open source license for their profiler, greatly simplifying
 
 YourKit is kindly supporting open source projects with its full-featured Java Profiler. YourKit, LLC is the creator of innovative and intelligent tools for profiling Java and .NET applications. Take a look at YourKit's leading software products:
 
-* <a href="http://www.yourkit.com/java/profiler/index.jsp">YourKit Java Profiler</a> and
-* <a href="http://www.yourkit.com/.net/profiler/index.jsp">YourKit .NET Profiler</a>.
+* <a href="https://www.yourkit.com/java/profiler/index.jsp">YourKit Java Profiler</a> and
+* <a href="https://www.yourkit.com/.net/profiler/index.jsp">YourKit .NET Profiler</a>.
 
 Releases and Dependency Information
 ========================================
 
-Latest stable release: 0.6.7
-
-* [All Released Versions](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.clojure%22%20AND%20a%3A%22tools.analyzer%22)
+Latest stable release: 1.1.0
 
-* [Development Snapshot Versions](https://oss.sonatype.org/index.html#nexus-search;gav%7Eorg.clojure%7Etools.analyzer%7E%7E%7E)
+* [All Released Versions](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.clojure%22%20AND%20a%3A%22tools.analyzer%22)
+* [Development Snapshot Versions](https://clojure.org/releases/downloads#_using_clojure_snapshot_releases)
 
 [Leiningen](https://github.com/technomancy/leiningen) dependency information:
 
 ```clojure
-[org.clojure/tools.analyzer "0.6.7"]
+[org.clojure/tools.analyzer "1.1.0"]
 ```
-[Maven](http://maven.apache.org/) dependency information:
+[Maven](https://maven.apache.org/) dependency information:
 
 ```xml
 <dependency>
   <groupId>org.clojure</groupId>
   <artifactId>tools.analyzer</artifactId>
-  <version>0.6.7</version>
+  <version>1.1.0</version>
 </dependency>
 ```
 
@@ -226,22 +227,18 @@ Latest stable release: 0.6.7
 API Index
 ========================================
 
-* [CrossClj Documentation](http://crossclj.info/doc/org.clojure/tools.analyzer/lastest/index.html)
-* [API index](http://clojure.github.io/tools.analyzer)
+* [API index](https://clojure.github.io/tools.analyzer)
 
 Developer Information
 ========================================
 
 * [GitHub project](https://github.com/clojure/tools.analyzer)
-
-* [Bug Tracker](http://dev.clojure.org/jira/browse/TANAL)
-
-* [Continuous Integration](http://build.clojure.org/job/tools.analyzer/)
-
-* [Compatibility Test Matrix](http://build.clojure.org/job/tools.analyzer-test-matrix/)
+* [Bug Tracker](https://clojure.atlassian.net/browse/TANAL)
+* [Continuous Integration](https://build.clojure.org/job/tools.analyzer/)
+* [Compatibility Test Matrix](https://build.clojure.org/job/tools.analyzer-test-matrix/)
 
 ## License
 
-Copyright © 2013-2015 Nicola Mometto, Rich Hickey & contributors.
+Copyright © 2013-2018 Nicola Mometto, Rich Hickey & contributors.
 
 Distributed under the Eclipse Public License, the same as Clojure.


=====================================
pom.xml
=====================================
@@ -2,8 +2,8 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <artifactId>tools.analyzer</artifactId>
-  <version>0.6.9</version>
-  <name>${artifactId}</name>
+  <version>1.1.1</version>
+  <name>tools.analyzer</name>
   <description>An analyzer for Clojure code, written in Clojure and producing AST in EDN</description>
 
   <properties>
@@ -13,7 +13,7 @@
   <parent>
     <groupId>org.clojure</groupId>
     <artifactId>pom.contrib</artifactId>
-    <version>0.1.2</version>
+    <version>1.1.0</version>
   </parent>
 
   <developers>
@@ -27,6 +27,6 @@
     <connection>scm:git:git://github.com/clojure/tools.analyzer.git</connection>
     <developerConnection>scm:git:git://github.com/clojure/tools.analyzer.git</developerConnection>
     <url>http://github.com/clojure/tools.analyzer</url>
-    <tag>tools.analyzer-0.6.9</tag>
+    <tag>v1.1.1</tag>
   </scm>
 </project>


=====================================
project.clj
=====================================
@@ -1,9 +1,11 @@
-(defproject org.clojure/tools.analyzer "0.6.8-SNAPSHOT"
+(defproject org.clojure/tools.analyzer "1.0.1-SNAPSHOT"
   :description "An analyzer for Clojure code, written in Clojure and producing AST in EDN."
   :url "https://github.com/clojure/tools.analyzer"
   :license {:name "Eclipse Public License"
             :url "http://www.eclipse.org/legal/epl-v10.html"}
   :source-paths ["src/main/clojure"]
   :test-paths ["src/test/clojure"]
-  :dependencies [[org.clojure/clojure "1.9.0-master-SNAPSHOT"]
-                 [com.datomic/datomic-free "0.9.5327" :scope "provided" :exclusions [joda-time]]])
+  :dependencies [[org.clojure/clojure "1.10.1"]
+                 [com.datomic/datomic-free "0.9.5327" :scope "provided" :exclusions [joda-time]]]
+  :repositories [["sonatype" "https://oss.sonatype.org/content/repositories/releases"]
+                 ["snapshots" "https://oss.sonatype.org/content/repositories/snapshots"]])


=====================================
src/main/clojure/clojure/tools/analyzer.clj
=====================================
@@ -21,7 +21,7 @@
    Setting up the global env is also required, see clojure.tools.analyzer.env
 
    See clojure.tools.analyzer.core-test for an example on how to setup the analyzer."
-  (:refer-clojure :exclude [macroexpand-1 macroexpand var? record? boolean?])
+  (:refer-clojure :exclude [macroexpand-1 macroexpand var? record? boolean? update-keys update-vals])
   (:require [clojure.tools.analyzer.utils :refer :all]
             [clojure.tools.analyzer.env :as env])
   (:import (clojure.lang Symbol IPersistentVector IPersistentMap IPersistentSet ISeq IType IRecord)))
@@ -102,7 +102,7 @@
    * :form the form represented by the AST node
    * :env  the environment map of the AST node
 
-   Additionaly if the AST node contains sub-nodes, it is guaranteed to have:
+   Additionally if the AST node contains sub-nodes, it is guaranteed to have:
    * :children a vector of the keys of the AST node mapping to the sub-nodes,
                ordered, when that makes sense
 


=====================================
src/main/clojure/clojure/tools/analyzer/ast.clj
=====================================
@@ -12,7 +12,7 @@
   (:require [clojure.tools.analyzer.utils :refer [into! rseqv mapv']]))
 
 (defn cycling
-  "Combine the given passes in a single pass that will be applieed repeatedly
+  "Combine the given passes in a single pass that will be applied repeatedly
    to the AST until applying it another time will have no effect"
   [& fns*]
   (let [fns (cycle fns*)]
@@ -26,7 +26,7 @@
 (defn children*
   "Return a vector of vectors of the children node key and the children expression
    of the AST node, if it has any.
-   The returned vector returns the childrens in the order as they appear in the
+   The returned vector returns the children in the order as they appear in the
    :children field of the AST, and the children expressions may be either a node
    or a vector of nodes."
   [{:keys [children] :as ast}]


=====================================
src/main/clojure/clojure/tools/analyzer/ast/query.clj
=====================================
@@ -12,7 +12,7 @@
             [clojure.tools.analyzer.utils :refer [compile-if]]))
 
 (defn query-map
-  "Transoforms a Datomic query from its vector representation to its map one.
+  "Transforms a Datomic query from its vector representation to its map one.
    If the given query is already in its map representation, the original query
    is returned."
   [query]
@@ -29,7 +29,7 @@
   "Given a Datomic query, walk the :where clauses searching for
    expression clauses with nested calls, unnesting those calls.
 
-   E.g {:where [[(inc (dec ?foo)) ?bar] ..] ..} will be transformed in
+   E.g {:where [[(inc (dec ?foo)) ?bar] ..] ..} will be transformed into
    {:where [[(dec ?foo) ?1234] [(inc ?1234) ?bar] ..] ..}"
   [query]
   (let [{:keys [where] :as query} (query-map query)]
@@ -73,7 +73,7 @@
 
 (defn db
   "Given a list of ASTs, returns a representation of those
-   that can be used as a database in a Datomic Datalog query"
+   that can be used as a database in a Datomic Datalog query."
   [asts]
   (mapcat ast/ast->eav asts))
 


=====================================
src/main/clojure/clojure/tools/analyzer/env.clj
=====================================
@@ -10,9 +10,9 @@
   (:refer-clojure :exclude [ensure]))
 
 (def ^:dynamic *env*
-  "Global env atom
+  "Global env atom containing a map.
    Required options:
-    * :namespaces an atom containing a map from namespace symbol to namespace map,
+    * :namespaces a map from namespace symbol to namespace map,
       the namespace map contains at least the following keys:
      ** :mappings a map of mappings of the namespace, symbol to var/class
      ** :aliases a map of the aliases of the namespace, symbol to symbol


=====================================
src/main/clojure/clojure/tools/analyzer/passes.clj
=====================================
@@ -1,10 +1,11 @@
 (ns clojure.tools.analyzer.passes
   "Utilities for pass scheduling"
+  (:refer-clojure :exclude [update-vals])
   (:require [clojure.tools.analyzer.ast :refer [prewalk postwalk]]
             [clojure.tools.analyzer.utils :refer [update-vals]]))
 
 (defn ^:private has-deps?
-  "Returns true if the pass has some dependencies"
+  "Returns true if the pass has any dependencies"
   [pass]
   (seq (:dependencies pass)))
 
@@ -15,7 +16,7 @@
 
 (defn ^:private remove-pass
   "Takes a set of pass-infos and a pass, and removes the pass from the set of
-   pass-infos, updating :dependencies and :dependants aswell"
+   pass-infos, updating :dependencies and :dependants as well."
   [passes pass]
   (indicize (reduce (fn [m p] (conj m (-> p (update-in [:dependencies] disj pass)
                                         (update-in [:dependants] disj pass))))
@@ -45,7 +46,7 @@
 
 (defn calculate-deps
   "Takes a map of pass-name -> pass-info and adds to each pass-info :dependencies and
-   :dependants info, which also contain the transitive dependencies"
+   :dependants info, which also contains the transitive dependencies"
   [passes]
   (let [passes (desugar-deps passes)
         dependencies (reduce-kv (fn [deps pname {:keys [depends]}]
@@ -65,7 +66,7 @@
    * the remaining scheduler state
 
    E.g. given:
-   [{:walk :any .. } {:walk :pre ..} {:walk :post ..} {:walk :pre ..}]
+   [{:walk :any ..} {:walk :pre ..} {:walk :post ..} {:walk :pre ..}]
    it will return:
    [:pre [{:walk :any ..} {:walk :pre ..}] [{:walk :post ..} {:walk :pre ..}]]"
   [state]
@@ -191,7 +192,7 @@
                  - :any  if the pass can be composed with other passes in both a prewalk
                          or a postwalk
    * :affects  a set of Vars, this pass must be the last in the same tree traversal that all
-               the specified passes must partecipate in
+               the specified passes must participate in
                This pass must take a function as argument and return the actual pass, the
                argument represents the reified tree traversal which the pass can use to
                control a recursive traversal, implies :depends


=====================================
src/main/clojure/clojure/tools/analyzer/passes/add_binding_atom.clj
=====================================
@@ -24,6 +24,10 @@
          (swap! state assoc (:name ast) a)
          (assoc ast :atom a))
        :local
-       (assoc ast :atom (or (@state (:name ast))
-                            (atom {})))
+       (if-let [a (@state (:name ast))]
+         (assoc ast :atom a)
+         ;; handle injected locals
+         (let [a (get-in ast [:env :locals (:name ast) :atom] (atom {}))]
+           (swap! state assoc (:name ast) a)
+           (assoc ast :atom a)))
        ast)))


=====================================
src/main/clojure/clojure/tools/analyzer/passes/elide_meta.clj
=====================================
@@ -73,7 +73,10 @@
         (if (= new-meta (:form meta))
           ast
           (assoc ast :meta (replace-meta meta new-meta)))
-        (assoc (dissoc ast :meta) :children [:init]))
+        (let [ast (dissoc ast :meta)]
+          (if-let [new-children (not-empty (filterv (complement #{:meta}) (:children ast)))]
+            (assoc ast :children new-children)
+            (dissoc ast :children))))
       ast)))
 
 (defn elide-meta


=====================================
src/main/clojure/clojure/tools/analyzer/passes/uniquify.clj
=====================================
@@ -7,6 +7,7 @@
 ;;   You must not remove this notice, or any other, from this software.
 
 (ns clojure.tools.analyzer.passes.uniquify
+  (:refer-clojure :exclude [update-vals])
   (:require [clojure.tools.analyzer.ast :refer [update-children children]]
             [clojure.tools.analyzer.utils :refer [update-vals]]
             [clojure.tools.analyzer.env :as env]))


=====================================
src/main/clojure/clojure/tools/analyzer/passes/warn_earmuff.clj
=====================================
@@ -17,8 +17,8 @@
   (let [name (str (:name ast))]
     (when (and (= :def (:op ast))
                (> (count name) 2)  ;; Allow * and ** as non-dynamic names
-               (.startsWith name "*")
-               (.endsWith name "*")
+               (= (nth name 0) \*)
+               (= (nth name (dec (count name))) \*)
                (not (dynamic? (:var ast) (:val (:meta ast)))))
       (binding [*out* *err*]
         (println "Warning:" name "not declared dynamic and thus is not dynamically rebindable,"


=====================================
src/main/clojure/clojure/tools/analyzer/utils.clj
=====================================
@@ -7,7 +7,7 @@
 ;;   You must not remove this notice, or any other, from this software.
 
 (ns clojure.tools.analyzer.utils
-  (:refer-clojure :exclude [record? boolean?])
+  (:refer-clojure :exclude [record? boolean? update-keys update-vals])
   (:require [clojure.tools.analyzer.env :as env])
   (:import (clojure.lang IRecord IType IObj
                          IReference Var)))


=====================================
src/test/clojure/clojure/tools/analyzer/core_test.clj
=====================================
@@ -15,7 +15,7 @@
        (= (first opname) \.) ; (.foo bar ..)
        (let [[target & args] expr
              args (list* (symbol (subs opname 1)) args)]
-         (with-meta (list '. target (if (= 1 (count args)) ;; we don't know if (.foo bar) ia
+         (with-meta (list '. target (if (= 1 (count args)) ;; we don't know if (.foo bar) is
                                       (first args) args)) ;; a method call or a field access
            (meta form)))
 
@@ -36,7 +36,7 @@
                    (:macro (meta v)))
             (apply v form env (rest form)) ; (m &form &env & args)
             (desugar-host-expr form)))))
-        form))
+    form))
 
 (defmacro foo [] 1)
 
@@ -183,4 +183,20 @@
   (let [i-ast (ast (1 2))]
     (is (= :invoke (-> i-ast :op)))
     (is (= 1 (-> i-ast :fn :form)))
-    (is (= [2] (->> i-ast :args (mapv :form))))))
+    (is (= [2] (->> i-ast :args (mapv :form)))))
+
+  (let [def-ast (ast (def a))]
+    (is (= :def (-> def-ast :op)))
+    (is (empty? (-> def-ast :children)))
+    (is (nil? (:init def-ast))))
+
+  (let [def-ast (ast (def a nil))]
+    (is (= :def (-> def-ast :op)))
+    (is (= [:init] (:children def-ast)))
+    (is (= :const (-> def-ast :init :op))))
+
+  (let [def-ast (ast (def a "doc" nil))]
+    (is (= :def (-> def-ast :op)))
+    (is (= [:meta :init] (:children def-ast)))
+    (is (= "doc" (-> def-ast :doc)))
+    (is (= :const (-> def-ast :init :op)))))


=====================================
src/test/clojure/clojure/tools/analyzer/query_test.clj
=====================================
@@ -8,20 +8,37 @@
             [clojure.tools.analyzer.utils :refer [compile-if]]
             [clojure.tools.analyzer.passes.index-vector-nodes :refer [index-vector-nodes]]))
 
+(def clojure-version-seven-query
+  '[:find ?docstring
+    :where
+    [?def :op :def]
+    [?def :init ?fn]
+    [?fn :methods ?method]
+    [?method :body ?body]
+    [?body :statements ?statement]
+    [?statement :val ?docstring]
+    [?statement :type :string]
+    [?statement :idx 0]])
+
+(def clojure-version-eight-and-above-query
+  '[:find ?docstring
+    :where
+    [?def :op :def]
+    [?def :init ?fn]
+    [?fn :expr ?expr]
+    [?expr :methods ?method]
+    [?method :body ?body]
+    [?body :statements ?statement]
+    [?statement :val ?docstring]
+    [?statement :type :string]
+    [?statement :idx 0]])
+
 (compile-if (Class/forName "datomic.Datom")
  (deftest query
-   (let [ast (ast/prewalk (ast (defn x [] "misplaced docstring" 1))
-                          index-vector-nodes)]
+   (let [ast       (ast/prewalk (ast (defn x [] "misplaced docstring" 1))
+                                index-vector-nodes)
+         the-query (if (< (:minor *clojure-version*) 8)
+                     clojure-version-seven-query
+                     clojure-version-eight-and-above-query)]
      (is (= "misplaced docstring"
-            (ffirst
-             (q '[:find ?docstring
-                  :where
-                  [?def :op :def]
-                  [?def :init ?fn]
-                  [?fn :methods ?method]
-                  [?method :body ?body]
-                  [?body :statements ?statement]
-                  [?statement :val ?docstring]
-                  [?statement :type :string]
-                  [?statement :idx 0]]
-                [ast])))))))
+            (ffirst (q the-query [ast])))))))



View it on GitLab: https://salsa.debian.org/clojure-team/tools-analyzer-clojure/-/commit/fc08c9d8361531f1d1ad98413ef39a7dd9dcbf9f

-- 
View it on GitLab: https://salsa.debian.org/clojure-team/tools-analyzer-clojure/-/commit/fc08c9d8361531f1d1ad98413ef39a7dd9dcbf9f
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20230202/fc6d0a59/attachment.htm>


More information about the pkg-java-commits mailing list