diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE deleted file mode 100644 index 28248bb..0000000 --- a/.github/PULL_REQUEST_TEMPLATE +++ /dev/null @@ -1,10 +0,0 @@ -Hi! Thanks for your interest in contributing to this project. - -Clojure contrib projects do not use GitHub issues or pull requests. -If you would like to discuss a problem or enhancement request, please -file a question to discuss on https://ask.clojure.org and use the -appropriate category under "Contrib libs". If necessary, a JIRA will -be filed by a developer. - -For more information on contributing to Clojure projects, see: -https://clojure.org/dev diff --git a/.github/workflows/doc-build.yml b/.github/workflows/doc-build.yml deleted file mode 100644 index 2650e73..0000000 --- a/.github/workflows/doc-build.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: Build API Docs - -permissions: - contents: write - -on: - workflow_dispatch: - -jobs: - call-doc-build-workflow: - uses: clojure/build.ci/.github/workflows/doc-build.yml@master - with: - project: clojure/tools.trace diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 286cf95..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Release on demand - -permissions: - contents: write - -on: - workflow_dispatch: - inputs: - releaseVersion: - description: "Version to release" - required: true - snapshotVersion: - description: "Snapshot version after release" - required: true - -jobs: - call-release: - uses: clojure/build.ci/.github/workflows/release.yml@master - with: - releaseVersion: ${{ github.event.inputs.releaseVersion }} - snapshotVersion: ${{ github.event.inputs.snapshotVersion }} - secrets: inherit \ No newline at end of file diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml deleted file mode 100644 index 9fdad8c..0000000 --- a/.github/workflows/snapshot.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: Snapshot on demand - -permissions: - contents: read - -on: [workflow_dispatch] - -jobs: - call-snapshot: - uses: clojure/build.ci/.github/workflows/snapshot.yml@master - secrets: inherit diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 2cc441a..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: Test - -permissions: - contents: read - -on: [push] - -jobs: - call-test: - uses: clojure/build.ci/.github/workflows/test.yml@master diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 007b044..0000000 --- a/.gitignore +++ /dev/null @@ -1,65 +0,0 @@ -# Compiled source # -################### -*.com -*.class -*.dll -*.exe -*.o -*.so - -# Packages # -############ -# it's better to unpack these files and commit the raw source -# git has its own built in compression methods -*.7z -*.dmg -*.gz -*.iso -*.jar -*.rar -*.tar -*.zip - -# Logs and databases # -###################### -*.log -*.sql -*.sqlite - -# OS generated files # -###################### -.DS_Store? -ehthumbs.db -Icon? -Thumbs.db - -# Specific folders -bin/* -target/* -classes/* - -# Eclipse stuff -*.pydevproject -.metadata -.classpath -.project -bin/** -tmp/** -tmp/**/* -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath - -# CDT-specific -.cproject - -# leinigen -.lein-deps-sum -.lein-failures -lib/** - -/bin diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index b97c77b..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,12 +0,0 @@ -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] on the Clojure website for -more information on how to contribute. - -[Clojure contrib]: https://clojure.org/community/contrib_libs -[Contributing]: https://clojure.org/community/contributing -[JIRA]: https://clojure.atlassian.net/browse/TTRACE -[guidelines]: https://clojure.org/community/contrib_howto diff --git a/LICENSE b/LICENSE deleted file mode 100644 index e246f6a..0000000 --- a/LICENSE +++ /dev/null @@ -1,205 +0,0 @@ -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. - - diff --git a/README.md b/README.md deleted file mode 100644 index de1516c..0000000 --- a/README.md +++ /dev/null @@ -1,144 +0,0 @@ -clojure.tools.trace -======================================== - -A Clojure trace tool. Defines tracing macros/fns to help you see what your code is doing. - -Formerly known as clojure.contrib.trace. - -See the [tools.trace API Reference](https://clojure.github.io/tools.trace/). - - -Releases and Dependency Information -======================================== - -Latest stable release: 0.9.1 - -* [All Released Versions](https://search.maven.org/#search|ga|1|g%3A%22org.clojure%22%20AND%20a%3A%22tools.trace%22) - -* [Development Snapshot Versions](https://oss.sonatype.org/index.html#nexus-search;gav~org.clojure~tools.trace~~~) - -[CLI/`deps.edn`](https://clojure.org/reference/deps_and_cli) dependency information: -```clojure -org.clojure/tools.trace {:mvn/version "0.9.1"} -``` - -[Leiningen](https://github.com/technomancy/leiningen) dependency information: - -```clojure - [org.clojure/tools.trace "0.9.1"] -``` - -[Maven](http://maven.apache.org/) dependency information: -```xml - - org.clojure - tools.trace - 0.9.1 - -``` - - - -Example Usage -======================================== -```clojure -=> (use 'clojure.tools.trace) - -=> (trace (* 2 3)) ;; To trace a value -TRACE: 6 -6 - -=> (trace "tag" (* 2 3)) ;; To trace a value and assign a trace tag -TRACE tag: 6 -6 - -=> (deftrace fubar [x v] (+ x v)) ;; To trace a function call and its return value -=> (fubar 2 3) -TRACE t1107: (fubar 2 3) -TRACE t1107: => 5 -5 - -=> (do (+ 1 3) (* 5 6) (/ 1 0)) -ArithmeticException Divide by zero clojure.lang.Numbers.divide (Numbers.java:156) -=> (trace-forms (+ 1 3) (* 5 6) (/ 1 0)) ;; To identify which form is failing -ArithmeticException Divide by zero - Form failed: (/ 1 0) - clojure.lang.Numbers.divide (Numbers.java:156) - -(trace-ns myown.namespace) ;; To dynamically trace/untrace all fns in a name space (untrace-ns myown.namespace) - -(trace-vars myown.namespace/fubar) ;; To dynamically trace/untrace specific fns (untrace-vars myown.namespace/fubar) - -``` - - - -Developer Information -======================================== - -* [GitHub project](https://github.com/clojure/tools.trace) -* [Bug Tracker](https://clojure.atlassian.net/browse/TTRACE) -* [Continuous Integration](https://github.com/clojure/tools.trace/actions/workflows/test.yml) - - - -Change Log -==================== - -* Release 0.9.1 Sep 23, 2026: - * Fix two protocol extensions extending the wrong method -* Release 0.9.0 Dec 30, 2025: - * Update parent pom version -* Release 0.8.0 Feb 19, 2024: - * Update parent pom version -* Release 0.7.11 Feb 11, 2021: - * Fixed reflection warnings with type hints -* Release 0.7.10 September 23, 2018: - * Closed TTRACE-16, applied fix from Andy Fingerhut, fixed typos in README, support Clojure 1.9, fixes to unit tests - * Closed TTRACE-13, trace-ns macro accept both quoted or unquoted namespace argument -* Release 0.7.9 October 8, 2015: - * Closed TTRACE-11, trace-vars/untrace-vars now accept vars - * Closed TTRACE-12, move away from Java 5, extend some new throwables with ThrowableRecompose - * Added more tests for TTRACE-12 -* Release 0.7.8 March 15, 2013: - * Fixed README -* Release 0.7.7 March 14, 2013: - * Replaced def by declare in deftrace macro - * Remove unnecessary call to run-tests in test suite - * Trace only functions in trace-vars* - * Added missing cond in clone-throwable on a Throwable - * Do not allow trace-vars* to reapply tracing on an already traced function -* Release 0.7.6 Aug 23, 2013: - * Fixed crash of throwable tracing when no string based constructor exists -* Release 0.7.5 Dec 1, 2012: - * Fixed README and comments in source file -* Release 0.7.4 Dec 1, 2012: - * added traced? and traceable/ fns - * removed reflection warnings -* Release 0.7.3 March 4, 2012: - * added macro wrappers around fns allowing dynamic tracing. -* Release 0.7.2 Feb. 20, 2012: - * added contribution from Michał Marczyk and Don Jackson to allow dynamic tracing of fn vars and all fns in a given namespace. -* Release 0.7.1 on 2011-09-18 - * moved it to new contrib modular struct - * made it 1.2/1.3 compliant - * supported doc strings - * added a trace-form macro, from Jonathan Fischer -* Changes from clojure.trace - * replaced *trace-out* with tracer - * made trace a function instead of a macro (suggestion from Stuart Halloway) - * added trace-fn-call - - -Copyright and License -======================================== - -Copyright (c) Stuart Sierra, Michel Salim, Luc Préfontaine, Jonathan Fischer Friberg, Michał Marczyk, Andy Fingerhut. -All rights reserved. -The use and distribution terms for this software are covered by the Eclipse Public -License 1.0 (https://opensource.org/license/epl-1-0/) which can -be found in the file epl-v10.html at the root of this distribution. -By using this software in any fashion, you are agreeing to be bound by -the terms of this license. You must not remove this notice, or any -other, from this software. - diff --git a/api-index.html b/api-index.html new file mode 100644 index 0000000..f0f1a6f --- /dev/null +++ b/api-index.html @@ -0,0 +1,236 @@ + + + + Index - tools.trace 0.7.12-SNAPSHOT API documentation + + + + + + + + + +
+ +
+ +
+
+
+
+
+ +

Index of Public Functions and Variables - tools.trace 0.7.12-SNAPSHOT (in development)

+This page has an alphabetical index of all the documented functions and variables +in tools.trace. + + +

+

+Shortcuts:
+A B C D + E F G H + I J K L + M +
+N O P Q + R S T U + V W X Y + Z +
+Other +
+
+ +
+

A

+
+
+  
+
+

B

+
+
+  
+
+

C

+
+ clone-throwable              function      clojure.tools.trace 
+
+  
+
+

D

+
+ deftrace                     macro         clojure.tools.trace Use in place of defn; traces each call/return of ...
+ dotrace                      macro         clojure.tools.trace Given a sequence of function identifiers, evaluat...
+
+  
+
+

E

+
+
+  
+
+

F

+
+
+  
+
+

G

+
+
+  
+
+

H

+
+
+  
+
+

I

+
+
+  
+
+

J

+
+
+  
+
+

K

+
+
+  
+
+

L

+
+
+  
+
+

M

+
+
+  
+
+

N

+
+
+  
+
+

O

+
+
+  
+
+

P

+
+
+  
+
+

Q

+
+
+  
+
+

R

+
+
+  
+
+

S

+
+
+  
+
+

T

+
+ ThrowableRecompose           protocol      clojure.tools.trace Protocol to isolate trace-form from convoluted th...
+ trace                        function      clojure.tools.trace Sends name (optional) and value to the tracer fun...
+ trace-forms                  macro         clojure.tools.trace Trace all the forms in the given body. Returns an...
+ trace-ns                     macro         clojure.tools.trace Trace all fns in the given name space. The given ...
+ trace-vars                   macro         clojure.tools.trace Trace each of the specified Vars. The arguments m...
+ traceable?                   function      clojure.tools.trace Returns true if the given var can be traced, fals...
+ traced?                      function      clojure.tools.trace Returns true if the given var is currently traced...
+
+  
+
+

U

+
+ untrace-ns                   macro         clojure.tools.trace Untrace all fns in the given name space. The give...
+ untrace-vars                 macro         clojure.tools.trace Untrace each of the specified Vars. Reverses the ...
+
+  
+
+

V

+
+
+  
+
+

W

+
+
+  
+
+

X

+
+
+  
+
+

Y

+
+
+  
+
+

Z

+
+
+  
+
+

Other

+
+
+  
+
+ +
+
+
+
+
+ +
+
Logo & site design by Tom Hickey.
+ Clojure auto-documentation system by Tom Faulhaber.
+
+ + + + \ No newline at end of file diff --git a/epl.html b/epl.html deleted file mode 100644 index 5d4eddd..0000000 --- a/epl.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - -Eclipse Public License - Version 1.0 - - - - - - -

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.

- - - - diff --git a/index-0.7.10.clj b/index-0.7.10.clj new file mode 100644 index 0000000..244e679 --- /dev/null +++ b/index-0.7.10.clj @@ -0,0 +1,173 @@ +{:namespaces + ({:doc + "This file defines simple tracing macros to help you see what your code is doing.", + :author + "Stuart Sierra, Michel Salim, Luc Préfontaine, Jonathan Fischer Friberg, Michał Marczyk, Don Jackson", + :name "clojure.tools.trace", + :wiki-url "http://clojure.github.io/tools.trace/index.html", + :source-url + "https://github.com/clojure/tools.trace/blob/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj"}), + :vars + ({:raw-source-url + "https://github.com/clojure/tools.trace/raw/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj", + :name "deftrace", + :file "src/main/clojure/clojure/tools/trace.clj", + :source-url + "https://github.com/clojure/tools.trace/blob/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj#L102", + :line 102, + :var-type "macro", + :arglists ([name & definition]), + :doc + "Use in place of defn; traces each call/return of this fn, including\narguments. Nested calls to deftrace'd functions will print a\ntree-like structure.\nThe first argument of the form definition can be a doc string", + :namespace "clojure.tools.trace", + :wiki-url + "http://clojure.github.io/tools.trace//index.html#clojure.tools.trace/deftrace"} + {:raw-source-url + "https://github.com/clojure/tools.trace/raw/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj", + :name "dotrace", + :file "src/main/clojure/clojure/tools/trace.clj", + :source-url + "https://github.com/clojure/tools.trace/blob/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj#L116", + :line 116, + :var-type "macro", + :arglists ([fnames & exprs]), + :doc + "Given a sequence of function identifiers, evaluate the body\nexpressions in an environment in which the identifiers are bound to\nthe traced functions. Does not work on inlined functions,\nsuch as clojure.core/+", + :namespace "clojure.tools.trace", + :wiki-url + "http://clojure.github.io/tools.trace//index.html#clojure.tools.trace/dotrace"} + {:raw-source-url + "https://github.com/clojure/tools.trace/raw/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj", + :name "trace", + :file "src/main/clojure/clojure/tools/trace.clj", + :source-url + "https://github.com/clojure/tools.trace/blob/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj#L77", + :line 77, + :var-type "function", + :arglists ([value] [name value]), + :doc + "Sends name (optional) and value to the tracer function, then\nreturns value. May be wrapped around any expression without\naffecting the result.", + :namespace "clojure.tools.trace", + :wiki-url + "http://clojure.github.io/tools.trace//index.html#clojure.tools.trace/trace"} + {:raw-source-url + "https://github.com/clojure/tools.trace/raw/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj", + :name "trace-forms", + :file "src/main/clojure/clojure/tools/trace.clj", + :source-url + "https://github.com/clojure/tools.trace/blob/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj#L307", + :line 307, + :var-type "macro", + :arglists ([& body]), + :doc + "Trace all the forms in the given body. Returns any underlying uncaught exceptions that may make the forms fail.", + :namespace "clojure.tools.trace", + :wiki-url + "http://clojure.github.io/tools.trace//index.html#clojure.tools.trace/trace-forms"} + {:raw-source-url + "https://github.com/clojure/tools.trace/raw/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj", + :name "trace-ns", + :file "src/main/clojure/clojure/tools/trace.clj", + :source-url + "https://github.com/clojure/tools.trace/blob/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj#L398", + :line 398, + :var-type "macro", + :arglists ([n]), + :doc + "Trace all fns in the given name space. The given name space can be quoted, unquoted or stored in a var.\nWe must try to resolve the expression passed to us partially to find out if it needs to be quoted or not\nwhen passed to trace-ns*", + :namespace "clojure.tools.trace", + :wiki-url + "http://clojure.github.io/tools.trace//index.html#clojure.tools.trace/trace-ns"} + {:raw-source-url + "https://github.com/clojure/tools.trace/raw/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj", + :name "trace-vars", + :file "src/main/clojure/clojure/tools/trace.clj", + :source-url + "https://github.com/clojure/tools.trace/blob/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj#L355", + :line 355, + :var-type "macro", + :arglists ([& vs]), + :doc + "Trace each of the specified Vars.\nThe arguments may be Var objects or symbols to be resolved in the current\nnamespace.", + :namespace "clojure.tools.trace", + :wiki-url + "http://clojure.github.io/tools.trace//index.html#clojure.tools.trace/trace-vars"} + {:raw-source-url + "https://github.com/clojure/tools.trace/raw/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj", + :name "traceable?", + :file "src/main/clojure/clojure/tools/trace.clj", + :source-url + "https://github.com/clojure/tools.trace/blob/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj#L431", + :line 431, + :var-type "function", + :arglists ([v]), + :doc "Returns true if the given var can be traced, false otherwise", + :namespace "clojure.tools.trace", + :wiki-url + "http://clojure.github.io/tools.trace//index.html#clojure.tools.trace/traceable?"} + {:raw-source-url + "https://github.com/clojure/tools.trace/raw/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj", + :name "traced?", + :file "src/main/clojure/clojure/tools/trace.clj", + :source-url + "https://github.com/clojure/tools.trace/blob/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj#L425", + :line 425, + :var-type "function", + :arglists ([v]), + :doc + "Returns true if the given var is currently traced, false otherwise", + :namespace "clojure.tools.trace", + :wiki-url + "http://clojure.github.io/tools.trace//index.html#clojure.tools.trace/traced?"} + {:raw-source-url + "https://github.com/clojure/tools.trace/raw/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj", + :name "untrace-ns", + :file "src/main/clojure/clojure/tools/trace.clj", + :source-url + "https://github.com/clojure/tools.trace/blob/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj#L416", + :line 416, + :var-type "macro", + :arglists ([n]), + :doc + "Untrace all fns in the given name space. The given name space can be quoted, unquoted or stored in a var.\nWe must try to resolve the expression passed to us partially to find out if it needs to be quoted or not\nwhen passed to untrace-ns*", + :namespace "clojure.tools.trace", + :wiki-url + "http://clojure.github.io/tools.trace//index.html#clojure.tools.trace/untrace-ns"} + {:raw-source-url + "https://github.com/clojure/tools.trace/raw/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj", + :name "untrace-vars", + :file "src/main/clojure/clojure/tools/trace.clj", + :source-url + "https://github.com/clojure/tools.trace/blob/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj#L365", + :line 365, + :var-type "macro", + :arglists ([& vs]), + :doc + "Untrace each of the specified Vars.\nReverses the effect of trace-var / trace-vars / trace-ns for each\nof the arguments, replacing the traced functions with the original,\nuntraced versions.", + :namespace "clojure.tools.trace", + :wiki-url + "http://clojure.github.io/tools.trace//index.html#clojure.tools.trace/untrace-vars"} + {:raw-source-url + "https://github.com/clojure/tools.trace/raw/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj", + :name "ThrowableRecompose", + :file "src/main/clojure/clojure/tools/trace.clj", + :source-url + "https://github.com/clojure/tools.trace/blob/d56cf7003f9cf024e1fd15ace0944e8b4793953d/src/main/clojure/clojure/tools/trace.clj#L211", + :line 211, + :var-type "protocol", + :arglists nil, + :doc + "Protocol to isolate trace-form from convoluted throwables that \ndo not have a constructor with a single string argument.\n\nclone-throwable attempts to clone a throwable with a human readable stack trace\nand message :)\nIt must return a throwable of the same class. If not clonable, the original\nthrowable should be returned. At least this will preserve the original \nthrowable information.\n\nCloning should be non-obtrusive hence internal exceptions should be silently\nswallowed and return the original throwable.", + :namespace "clojure.tools.trace", + :wiki-url + "http://clojure.github.io/tools.trace//index.html#clojure.tools.trace/ThrowableRecompose"} + {:name "clone-throwable", + :doc nil, + :var-type "function", + :namespace "clojure.tools.trace", + :arglists ([this stack-trace args]), + :wiki-url + "http://clojure.github.io/tools.trace//index.html#clojure.tools.trace/clone-throwable", + :source-url nil, + :raw-source-url nil, + :file nil})} diff --git a/index.html b/index.html new file mode 100644 index 0000000..e341fc7 --- /dev/null +++ b/index.html @@ -0,0 +1,309 @@ + + + + clojure.tools.trace - tools.trace 0.7.12-SNAPSHOT API documentation + + + + + + + + + +
+ +
+ +
+
+
+
+
+ +

API for clojure.tools.trace + - tools.trace 0.7.12-SNAPSHOT (in development) +

+by Stuart Sierra, Michel Salim, Luc Préfontaine, Jonathan Fischer Friberg, Michał Marczyk, Don Jackson
+
Full namespace name: clojure.tools.trace +

+

Overview

+ +
This file defines simple tracing macros to help you see what your code is doing.
+ + +
+ +
+

+

Protocols

+
+
+
+

ThrowableRecompose

+ Protocol
+
Protocol to isolate trace-form from convoluted throwables that 
+do not have a constructor with a single string argument.
+
+clone-throwable attempts to clone a throwable with a human readable stack trace
+and message :)
+It must return a throwable of the same class. If not clonable, the original
+throwable should be returned. At least this will preserve the original 
+throwable information.
+
+Cloning should be non-obtrusive hence internal exceptions should be silently
+swallowed and return the original throwable.
+ Known implementations: java.io.IOError, java.lang.AssertionError, java.lang.ThreadDeath, java.lang.Throwable, java.nio.charset.CoderMalfunctionError, nil, Object +
+
+

clone-throwable

+ function
+
Usage: (clone-throwable this stack-trace args)
+
+

+      

+      
+      
+      
+    
+ + + Source +
+
+ +
+

+

Public Variables and Functions

+
+
+
+

deftrace

+ macro
+
Usage: (deftrace name & definition)
+
+
Use in place of defn; traces each call/return of this fn, including
+arguments. Nested calls to deftrace'd functions will print a
+tree-like structure.
+The first argument of the form definition can be a doc string
+

+    
+    
+    Source
+  
+
+
+

dotrace

+ macro
+
Usage: (dotrace fnames & exprs)
+
+
Given a sequence of function identifiers, evaluate the body
+expressions in an environment in which the identifiers are bound to
+the traced functions. Does not work on inlined functions,
+such as clojure.core/+
+

+    
+    
+    Source
+  
+
+
+

trace

+ function
+
Usage: (trace value)
+       (trace name value)
+
+
Sends name (optional) and value to the tracer function, then
+returns value. May be wrapped around any expression without
+affecting the result.
+

+    
+    
+    Source
+  
+
+
+

trace-forms

+ macro
+
Usage: (trace-forms & body)
+
+
Trace all the forms in the given body. Returns any underlying uncaught exceptions that may make the forms fail.
+

+    
+    
+    Source
+  
+
+
+

trace-ns

+ macro
+
Usage: (trace-ns n)
+
+
Trace all fns in the given name space. The given name space can be quoted, unquoted or stored in a var.
+We must try to resolve the expression passed to us partially to find out if it needs to be quoted or not
+when passed to trace-ns*
+

+    
+    
+    Source
+  
+
+
+

trace-vars

+ macro
+
Usage: (trace-vars & vs)
+
+
Trace each of the specified Vars.
+The arguments may be Var objects or symbols to be resolved in the current
+namespace.
+

+    
+    
+    Source
+  
+
+
+

traceable?

+ function
+
Usage: (traceable? v)
+
+
Returns true if the given var can be traced, false otherwise
+

+    
+    
+    Source
+  
+
+
+

traced?

+ function
+
Usage: (traced? v)
+
+
Returns true if the given var is currently traced, false otherwise
+

+    
+    
+    Source
+  
+
+
+

untrace-ns

+ macro
+
Usage: (untrace-ns n)
+
+
Untrace all fns in the given name space. The given name space can be quoted, unquoted or stored in a var.
+We must try to resolve the expression passed to us partially to find out if it needs to be quoted or not
+when passed to untrace-ns*
+

+    
+    
+    Source
+  
+
+
+

untrace-vars

+ macro
+
Usage: (untrace-vars & vs)
+
+
Untrace each of the specified Vars.
+Reverses the effect of trace-var / trace-vars / trace-ns for each
+of the arguments, replacing the traced functions with the original,
+untraced versions.
+

+    
+    
+    Source
+  
+
+ + +
+
+
+
+
+ +
+
Logo & site design by Tom Hickey.
+ Clojure auto-documentation system by Tom Faulhaber.
+
+ + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 852e0ae..0000000 --- a/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - 4.0.0 - tools.trace - 0.9.2-SNAPSHOT - ${project.artifactId} - Tools for tracing Clojure functions and expressions. - - - org.clojure - pom.contrib - 1.4.0 - - - - - Luc Préfontaine - - - - - scm:git:git@github.com:clojure/tools.trace.git - scm:git:git@github.com:clojure/tools.trace.git - git@github.com:clojure/tools.trace.git - HEAD - - diff --git a/project.clj b/project.clj deleted file mode 100644 index 3c89e1c..0000000 --- a/project.clj +++ /dev/null @@ -1,22 +0,0 @@ -(defproject tools.trace "0.7.9-SNAPSHOT" - :description "A Clojure tracing facility in Clojure" - :parent [org.clojure/pom.contrib "1.4.0"] - :url "https://github.com/clojure/tools.trace" - :license {:name "Eclipse Public License" - :url "http://www.eclipse.org/legal/epl-v10.html"} - :source-paths ["src/main/clojure"] - :test-paths ["src/test/clojure"] - :repositories {"sonatype-oss-public" "https://oss.sonatype.org/content/groups/public/"} - :dependencies [[org.clojure/clojure "1.11.4"]] - :profiles {:1.2 {:dependencies [[org.clojure/clojure "1.2.0"]]} - :1.3 {:dependencies [[org.clojure/clojure "1.3.0"]]} - :1.4 {:dependencies [[org.clojure/clojure "1.4.0"]]} - :1.5 {:dependencies [[org.clojure/clojure "1.5.1"]]} - :1.6 {:dependencies [[org.clojure/clojure "1.6.0"]]} - :1.7 {:dependencies [[org.clojure/clojure "1.7.0"]]} - :1.8 {:dependencies [[org.clojure/clojure "1.8.0"]]} - :1.9 {:dependencies [[org.clojure/clojure "1.9.0"]]}} - :aliases {"test-all" ["with-profile" "test,1.2:test,1.3:test,1.4:test,1.5:test,1.6:test,1.7:test:test,1.8:test,1.9" "test"] - "check-all" ["with-profile" "1.2:1.3:1.4:1.5:1.6:1.7:1.8:1.9" "check"]} - :min-lein-version "2.5.0") - diff --git a/src/main/clojure/clojure/tools/trace.clj b/src/main/clojure/clojure/tools/trace.clj deleted file mode 100644 index 935a38e..0000000 --- a/src/main/clojure/clojure/tools/trace.clj +++ /dev/null @@ -1,437 +0,0 @@ -;;; -;; trace.clj -- simple call-tracing macros for Clojure - -;; by Stuart Sierra, http://stuartsierra.com/ -;; December 3, 2008 - -;; Copyright (c) Stuart Sierra, 2008. All rights reserved. The use -;; and distribution terms for this software are covered by the Eclipse -;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) -;; which can be found in the file epl-v10.html at the root of this -;; distribution. By using this software in any fashion, you are -;; agreeing to be bound by the terms of this license. You must not -;; remove this notice, or any other, from this software. -;; -;; This file defines simple "tracing" macros to help you see what your -;; code is doing. -;; -;; CHANGE LOG -;; -;; Aug 23thd, 2013: Luc Préfontaine -;; -;; * Fixed crash of throwable tracing when no string based constructor exists -;; -;; December 1st, 2012: Luc Préfontaine -;; -;; * Fixed README and comments in source file -;; * fixed changelog and readme -;; * added traced? and traceable/ fns -;; * removed reflection warnings -;; -;; March 4, 2012: Luc Préfontaine -;; -;; * added macro wrappers around fns allowing dynamic tracing. -;; -;; Feb. 20, 2012: Luc Préfontaine -;; -;; * added contribution from Michał Marczyk and Don jackson to allow dynamic tracing of fns in a namespace. -;; -;; Sept 18, 2011: Luc Préfontaine -;; -;; * moved it to new contrib modular struct -;; -;; * made it 1.2/1.3 compliant -;; -;; * supported doc strings -;; -;; * added a trace-form macro, from Jonathan Fischer -;; -;; December 3, 2008: -;; -;; * replaced *trace-out* with tracer -;; -;; * made trace a function instead of a macro -;; (suggestion from Stuart Halloway) -;; -;; * added trace-fn-call -;; -;; June 9, 2008: first version -;;; -(ns ^{:author "Stuart Sierra, Michel Salim, Luc Préfontaine, Jonathan Fischer Friberg, Michał Marczyk, Don Jackson" - :doc "This file defines simple tracing macros to help you see what your code is doing."} - clojure.tools.trace - (:use [clojure.pprint])) - -(def ^{:doc "Current stack depth of traced function calls." :private true :dynamic true} - *trace-depth* 0) - -(def ^{:doc "Forms to ignore when tracing forms." :private true} - ignored-form? '#{def quote var try monitor-enter monitor-exit assert}) - -(defn ^{:private true} tracer - "This function is called by trace. Prints to standard output, but -may be rebound to do anything you like. 'name' is optional." - [name value] - (println (str "TRACE" (when name (str " " name)) ": " value))) - -(defn trace - "Sends name (optional) and value to the tracer function, then -returns value. May be wrapped around any expression without -affecting the result." - ([value] (trace nil value)) - ([name value] - (tracer name (pr-str value)) - value)) - -(defn ^{:private true} trace-indent - "Returns an indentation string based on *trace-depth*" - [] - (apply str (take *trace-depth* (repeat "| ")))) - -(defn ^{:skip-wiki true} trace-fn-call - "Traces a single call to a function f with args. 'name' is the -symbol name of the function." - [name f args] - (let [id (gensym "t")] - (tracer id (str (trace-indent) (pr-str (cons name args)))) - (let [value (binding [*trace-depth* (inc *trace-depth*)] - (apply f args))] - (tracer id (str (trace-indent) "=> " (pr-str value))) - value))) - -(defmacro deftrace - "Use in place of defn; traces each call/return of this fn, including - arguments. Nested calls to deftrace'd functions will print a - tree-like structure. - The first argument of the form definition can be a doc string" - [name & definition] - (let [doc-string (if (string? (first definition)) (first definition) "") - fn-form (if (string? (first definition)) (rest definition) definition)] - `(do - (declare ~name) - (let [f# (fn ~@fn-form)] - (defn ~name ~doc-string [& args#] - (trace-fn-call '~name f# args#)))))) - -(defmacro dotrace - "Given a sequence of function identifiers, evaluate the body -expressions in an environment in which the identifiers are bound to -the traced functions. Does not work on inlined functions, -such as clojure.core/+" - [fnames & exprs] - `(binding [~@(interleave fnames - (for [fname fnames] - `(let [f# @(var ~fname)] - (fn [& args#] - (trace-fn-call '~fname f# args#)))))] - ~@exprs)) - -(declare trace-form) -(defmulti trace-special-form (fn [form] (first form))) - -(defn ^{:private true} trace-bindings - "Trace the forms in the given binding list." - [bindings] - (vec (apply concat - (map (fn [[sym value]] - `[~sym (trace-forms ~value)]) (partition 2 bindings))))) - - ;; Trace the let form, its bindings then the forms in its body. -(defmethod trace-special-form - 'let* [[_ bindings & body]] - `(let* ~(trace-bindings bindings) - (trace-forms ~@body))) - -;; Trace the loop form, its bindings then the forms in its body. -(defmethod trace-special-form - 'loop* [[_ bindings & body]] - `(loop* ~(trace-bindings bindings) - (trace-forms ~@body))) - -;; Trace the new form, mainly its arguments. -(defmethod trace-special-form - 'new [[_ name & args]] - `(new ~name ~@(map trace-form args))) - -(defn ^{:private true} trace-fn-body - "Trace the forms in a function body." - [body] - `(~(first body) ~@(map trace-form (rest body)))) - -;; Trace the fn form. -(defmethod trace-special-form 'fn* [[_ & args]] - (if (symbol? (first args)) - (if (vector? (second args)) - `(fn* ~(first args) ~@(trace-fn-body (rest args))) - `(fn* ~(first args) ~@(map trace-fn-body (rest args)))) - (if (vector? (first args)) - `(fn* ~@(trace-fn-body args)) - `(fn* ~@(map trace-fn-body args))))) - -(defmethod trace-special-form :default [form] :default) - -(defn ^{:private true} trace-value - "Trace the given data structure by tracing individual values." - [v] - (cond - (vector? v) `(vector ~@(map trace-form v)) - (map? v) `(into {} ~(vec (map trace-value v))) - (set? v) `(into #{} ~(vec (map trace-form v))) - :else v)) - -(defn ^{:private true} recurs? - "Test if the given form contains a recur call." - [form] - (if (and (or (list? form) - (seq? form)) - (> (count form) 0)) - (condp = (first form) - 'recur true - 'quote false - (some identity (map recurs? (rest form)))) - false)) - -(defn ^{:private true} trace-form* - "Trace the given form body except if it is to be ignored." - [form] - (if (and (or (list? form) - (seq? form)) - (> (count form) 0)) - (if (ignored-form? (first form)) - form - (let [sform (trace-special-form form)] - (if (= sform :default) - (let [mform (macroexpand-1 form)] - (if (= form mform) - (cons (first mform) (map trace-form (rest mform))) - (trace-form mform))) - sform))) - (trace-value form))) - -(defprotocol ThrowableRecompose - "Protocol to isolate trace-form from convoluted throwables that - do not have a constructor with a single string argument. - - clone-throwable attempts to clone a throwable with a human readable stack trace - and message :) - It must return a throwable of the same class. If not clonable, the original - throwable should be returned. At least this will preserve the original - throwable information. - - Cloning should be non-obtrusive hence internal exceptions should be silently - swallowed and return the original throwable." - (clone-throwable [this stack-trace args])) - -(extend-type java.lang.AssertionError - ThrowableRecompose - (clone-throwable [this stack-trace args] - (try - (let [ctor (.getConstructor java.lang.AssertionError (into-array [java.lang.Object])) - arg (first args)] - (doto ^AssertionError (.newInstance ctor (into-array [arg])) (.setStackTrace stack-trace))) - (catch Exception e# this)))) - -(extend-type java.nio.charset.CoderMalfunctionError - ThrowableRecompose - (clone-throwable [this stack-trace args] - (try - (let [ctor (.getConstructor java.nio.charset.CoderMalfunctionError (into-array [java.lang.Exception])) - arg (first args)] - (cond - (instance? java.lang.Exception arg) - (doto ^java.nio.charset.CoderMalfunctionError (.newInstance ctor (into-array [arg])) (.setStackTrace stack-trace)) - (string? arg) - (doto ^java.nio.charset.CoderMalfunctionError (.newInstance ctor (into-array [(Exception. ^String arg)])) (.setStackTrace stack-trace)) - :else this)) - (catch Exception e# this)))) - -(extend-type java.io.IOError - ThrowableRecompose - (clone-throwable [this stack-trace args] - (try - (let [ctor (.getConstructor java.io.IOError (into-array [java.lang.Throwable])) - arg (first args)] - (cond - (instance? java.lang.Throwable (first arg)) - (doto ^java.io.IOError (.newInstance ctor (into-array [arg])) (.setStackTrace stack-trace)) - - (string? arg) - (doto ^java.io.IOError (.newInstance ctor (into-array [(Throwable. ^String arg)])) (.setStackTrace stack-trace)) - :else this)) - (catch Exception e# this)))) - -(extend-type java.lang.ThreadDeath - ThrowableRecompose - (clone-throwable [this _ _] this)) ;; No way we can add more info here, this one has no args to its constructor - -(extend-type java.lang.Throwable - ThrowableRecompose - (clone-throwable [this stack-trace args] - (try - (let [ctor (.getConstructor (class this) (into-array [java.lang.String])) - arg (first args)] - (cond - (string? arg) - (doto ^java.lang.Throwable (.newInstance ctor (into-array [arg])) (.setStackTrace stack-trace)) - :else (doto ^java.lang.Throwable (.newInstance ctor (into-array [(str arg)])) (.setStackTrace stack-trace)))) - (catch Exception e# this)))) - -(extend-type java.lang.Object - ThrowableRecompose - (clone-throwable [this _ _] this)) ;; Obviously something is wrong but the trace should not alter processing - -(extend-type nil - ThrowableRecompose - (clone-throwable [this _ _] this)) ;; Obviously something is wrong but the trace should not alter processing - -(defn ^{:skip-wiki true} trace-compose-throwable - "Re-create a new throwable with a composed message from the given throwable - and the message to be added. The exception stack trace is kept at a minimum." - [^Throwable throwable ^String message] - (let [previous-msg (or (.getMessage throwable) (format ": No message attached to throwable %s" throwable)) - composed-msg (str previous-msg (if-not (.endsWith previous-msg "\n") "\n") message (if-not (.endsWith message "\n") "\n")) - new-stack-trace (into-array java.lang.StackTraceElement [(aget (.getStackTrace throwable) 0)]) - new-throwable (clone-throwable throwable new-stack-trace [composed-msg])] - new-throwable)) - -(defn ^{:skip-wiki true} trace-form - "Trace the given form avoiding try catch when recur is present in the form." - [form] - (if (recurs? form) - (trace-form* form) - `(try - ~(trace-form* form) - (catch Throwable e# - (throw (trace-compose-throwable e# (format " Form failed: %s" (with-out-str (pprint '~form))))))))) - -(defmacro trace-forms - "Trace all the forms in the given body. Returns any underlying uncaught exceptions that may make the forms fail." - [& body] - `(do - ~@(map trace-form body))) - -(defn ^{:skip-wiki true} trace-var* - "If the specified Var holds an IFn and is not marked as a macro, its - contents is replaced with a version wrapped in a tracing call; - otherwise nothing happens. Can be undone with untrace-var. - - In the unary case, v should be a Var object or a symbol to be - resolved in the current namespace. - - In the binary case, ns should be a namespace object or a symbol - naming a namespace and s a symbol to be resolved in that namespace." - ([ns s] - (trace-var* (ns-resolve ns s))) - ([v] - (let [^clojure.lang.Var v (if (var? v) v (resolve v)) - ns (.ns v) - s (.sym v)] - (if (and (ifn? @v) (-> v meta :macro not) (-> v meta ::traced not)) - (let [f @v - vname (symbol (str ns "/" s))] - (doto v - (alter-var-root #(fn tracing-wrapper [& args] - (trace-fn-call vname % args))) - (alter-meta! assoc ::traced f))))))) - -(defn ^{:skip-wiki true} untrace-var* - "Reverses the effect of trace-var / trace-vars / trace-ns for the - given Var, replacing the traced function with the original, untraced - version. No-op for non-traced Vars. - - Argument types are the same as those for trace-var." - ([ns s] - (untrace-var* (ns-resolve ns s))) - ([v] - (let [^clojure.lang.Var v (if (var? v) v (resolve v)) - ns (.ns v) - s (.sym v) - f ((meta v) ::traced)] - (when f - (doto v - (alter-var-root (constantly ((meta v) ::traced))) - (alter-meta! dissoc ::traced)))))) - -(defmacro trace-vars - "Trace each of the specified Vars. - The arguments may be Var objects or symbols to be resolved in the current - namespace." - [& vs] - `(do ~@(for [x vs] - `(if (var? ~x) - (trace-var* ~x) - (trace-var* (quote ~x)))))) - -(defmacro untrace-vars - "Untrace each of the specified Vars. - Reverses the effect of trace-var / trace-vars / trace-ns for each - of the arguments, replacing the traced functions with the original, - untraced versions." - [& vs] - `(do ~@(for [x vs] - `(if (var? ~x) - (untrace-var* ~x) - (untrace-var* (quote ~x)))))) - -(defn ^{:skip-wiki true} trace-ns* - "Replaces each function from the given namespace with a version wrapped - in a tracing call. Can be undone with untrace-ns. ns should be a namespace - object or a symbol. - - No-op for clojure.core and clojure.tools.trace." - [ns] - (let [ns (the-ns ns)] - (when-not ('#{clojure.core clojure.tools.trace} (.name ns)) - (let [ns-fns (->> ns ns-interns vals (filter (comp fn? var-get)))] - (doseq [f ns-fns] - (trace-var* f)))))) - -(defn ^{:private true} resolves-as-var? - "Try to resolve the symbol in several ways to find out if it's a var or not." - [n] - (cond - (coll? n) nil - (try (find-ns n) (catch Exception _)) nil - :else - (if-let [v (try (ns-resolve *ns* n) (catch Exception _))] (var? v)))) - -(defmacro trace-ns - "Trace all fns in the given name space. The given name space can be quoted, unquoted or stored in a var. - We must try to resolve the expression passed to us partially to find out if it needs to be quoted or not - when passed to trace-ns*" - [n] - (let [quote? (not (or (resolves-as-var? n) (and (coll? n) (= (first n) (quote quote))))) - n (if quote? (list 'quote n) n)] - `(trace-ns* ~n))) - -(defn ^{:skip-wiki true} untrace-ns* - "Reverses the effect of trace-var / trace-vars / trace-ns for the - Vars in the given namespace, replacing each traced function from the - given namespace with the original, untraced version." - [ns] - (let [ns-fns (->> ns the-ns ns-interns vals)] - (doseq [f ns-fns] - (untrace-var* f)))) - -(defmacro untrace-ns - "Untrace all fns in the given name space. The given name space can be quoted, unquoted or stored in a var. - We must try to resolve the expression passed to us partially to find out if it needs to be quoted or not - when passed to untrace-ns*" - [n] - (let [quote? (not (or (resolves-as-var? n) (and (coll? n) (= (first n) (quote quote))))) - n (if quote? (list 'quote n) n)] - `(untrace-ns* ~n))) - -(defn traced? - "Returns true if the given var is currently traced, false otherwise" - [v] - (let [^clojure.lang.Var v (if (var? v) v (resolve v))] - (-> v meta ::traced nil? not))) - -(defn traceable? - "Returns true if the given var can be traced, false otherwise" - [v] - (let [^clojure.lang.Var v (if (var? v) v (resolve v))] - (and (ifn? @v) (-> v meta :macro not)))) - - diff --git a/src/test/clojure/clojure/tools/test_dummy_namespace.clj b/src/test/clojure/clojure/tools/test_dummy_namespace.clj deleted file mode 100644 index c56e476..0000000 --- a/src/test/clojure/clojure/tools/test_dummy_namespace.clj +++ /dev/null @@ -1,5 +0,0 @@ -(ns clojure.tools.test-dummy-namespace) - -(def baz :baz) -(defn foo [] :foo) -(defn bar [] (foo)) diff --git a/src/test/clojure/clojure/tools/test_trace.clj b/src/test/clojure/clojure/tools/test_trace.clj deleted file mode 100644 index b33dffb..0000000 --- a/src/test/clojure/clojure/tools/test_trace.clj +++ /dev/null @@ -1,137 +0,0 @@ -(ns clojure.tools.test-trace - "Tests for tools.trace." - [:use [clojure.test] [clojure.tools.trace]] - [:require [clojure.tools.test-dummy-namespace] [clojure.string :as s]]) - -(defn ^{:private true} - cleanup - "Remove variable output from the trace output and replace end of lines by |" - [s] - (s/replace (s/replace s #"t[0-9]+:" "t:#") #"\n" "|")) - -(deftrace fn-a - "fn-a Doc string" - [a b c] - (+ a b c)) - -(deftrace fn-b - [a b c] - (+ a b c)) - -(defn fn-let - [a b c] - (trace-forms (let [ d (/ 3 0)] d))) - -(defn fn-fn - [a b c] - (trace-forms ((fn [] (let [ d (/ 3 0)] d))))) - -(deftest test-with-docstring - (is (= (.endsWith ^String (cleanup (:doc (meta (var fn-a)))) "fn-a Doc string") true)) - (is (= (cleanup (with-out-str (fn-a 1 2 3))) "TRACE t:# (fn-a 1 2 3)|TRACE t:# => 6|"))) - -(deftest test-no-docstring - (is (= (cleanup (with-out-str (fn-b 1 2 3))) "TRACE t:# (fn-b 1 2 3)|TRACE t:# => 6|"))) - -(deftest test-trace-form - (is (thrown-with-msg? ArithmeticException #"Divide by zero\n Form failed: \(/ 9 a\)\n Form failed: \(let\* \[a 0 b \(/ 9 a\)\] b\)\n Form failed: \(let \[a 0 b \(/ 9 a\)\] b\)" - (trace-forms (let [a 0 b (/ 9 a)] b))))) - -(deftest test-throwables - (is (thrown-with-msg? AssertionError #"Assert failed: \(\= 2 3\)\n Form failed: \(assert \(\= 2 3\)\)" - (trace-forms (assert (= 2 3))))) - (is (thrown? java.lang.ThreadDeath - (trace-forms (throw (java.lang.ThreadDeath.))))) - (is (thrown-with-msg? java.nio.charset.CoderMalfunctionError #"Any string would do" - (trace-forms (throw (java.nio.charset.CoderMalfunctionError. (Exception. "Any string would do")))))) -;; Re-enable this test when Java 5 support is dropped -; (is (thrown? java.io.IOError -; (trace-forms (throw (java.io.IOError. (Throwable. "Any string would do")))))) - (is (thrown-with-msg? Throwable #"Any string would do" - (trace-forms (throw (Throwable. "Any string would do"))))) - (is (thrown-with-msg? Exception #"Any string would do" - (trace-forms (throw (Exception. "Any string would do")))))) - -(deftest test-fn-form - (is (thrown-with-msg? ArithmeticException #"Divide by zero\n Form failed: \(\(fn \[\] \(let \[d \(/ 3 0\)\] d\)\)\)" - (fn-fn 1 2 3)))) - -(deftest test-maps - (is (thrown-with-msg? ArithmeticException #"Divide by zero\n Form failed: \(/ 3 0\)\n Form failed: \{:a 1, :b \(/ 3 0\)\}" - (trace-forms {:a 1 :b (/ 3 0)})))) - -(def trace-ns-test-namespace 'clojure.tools.test-dummy-namespace) - -(deftest test-trace-foo - (trace-vars clojure.tools.test-dummy-namespace/bar) - (is (= (cleanup (with-out-str (clojure.tools.test-dummy-namespace/bar))) - "TRACE t:# (clojure.tools.test-dummy-namespace/bar)|TRACE t:# => :foo|")) - (untrace-vars clojure.tools.test-dummy-namespace/bar) - (is (= (cleanup (with-out-str (clojure.tools.test-dummy-namespace/bar))) ""))) - -(deftest test-trace-foo-var - (trace-vars (var clojure.tools.test-dummy-namespace/bar)) - (is (= (cleanup (with-out-str (clojure.tools.test-dummy-namespace/bar))) - "TRACE t:# (clojure.tools.test-dummy-namespace/bar)|TRACE t:# => :foo|")) - (untrace-vars (var clojure.tools.test-dummy-namespace/bar)) - (is (= (cleanup (with-out-str (clojure.tools.test-dummy-namespace/bar))) ""))) - -(deftest test-trace-all - (trace-vars clojure.tools.test-dummy-namespace/bar clojure.tools.test-dummy-namespace/foo) - (is (= (cleanup (with-out-str (clojure.tools.test-dummy-namespace/bar))) - "TRACE t:# (clojure.tools.test-dummy-namespace/bar)|TRACE t:# | (clojure.tools.test-dummy-namespace/foo)|TRACE t:# | => :foo|TRACE t:# => :foo|" )) - (untrace-vars clojure.tools.test-dummy-namespace/bar clojure.tools.test-dummy-namespace/foo) - (is (= (cleanup (with-out-str (clojure.tools.test-dummy-namespace/bar))) ""))) - -(deftest test-trace-ns-var - (trace-ns trace-ns-test-namespace) - (is (= (cleanup (with-out-str (clojure.tools.test-dummy-namespace/bar))) - "TRACE t:# (clojure.tools.test-dummy-namespace/bar)|TRACE t:# | (clojure.tools.test-dummy-namespace/foo)|TRACE t:# | => :foo|TRACE t:# => :foo|")) - (untrace-ns trace-ns-test-namespace) - (is (= (cleanup (with-out-str (clojure.tools.test-dummy-namespace/bar))) ""))) - -(deftest test-trace-ns-quoted - (trace-ns 'clojure.tools.test-dummy-namespace) - (is (= (cleanup (with-out-str (clojure.tools.test-dummy-namespace/bar))) - "TRACE t:# (clojure.tools.test-dummy-namespace/bar)|TRACE t:# | (clojure.tools.test-dummy-namespace/foo)|TRACE t:# | => :foo|TRACE t:# => :foo|")) - (untrace-ns 'clojure.tools.test-dummy-namespace) - (is (= (cleanup (with-out-str (clojure.tools.test-dummy-namespace/bar))) ""))) - -(deftest test-trace-ns-unquoted - (trace-ns clojure.tools.test-dummy-namespace) - (is (= (cleanup (with-out-str (clojure.tools.test-dummy-namespace/bar))) - "TRACE t:# (clojure.tools.test-dummy-namespace/bar)|TRACE t:# | (clojure.tools.test-dummy-namespace/foo)|TRACE t:# | => :foo|TRACE t:# => :foo|")) - (untrace-ns clojure.tools.test-dummy-namespace) - (is (= (cleanup (with-out-str (clojure.tools.test-dummy-namespace/bar))) ""))) - -(deftest istraced - (is (not (traced? 'clojure.tools.test-dummy-namespace/bar))) - (trace-vars clojure.tools.test-dummy-namespace/bar) - (is (traced? 'clojure.tools.test-dummy-namespace/bar)) - (trace-vars clojure.tools.test-dummy-namespace/bar) - (trace-vars clojure.tools.test-dummy-namespace/bar) - (trace-vars clojure.tools.test-dummy-namespace/bar) - (untrace-vars clojure.tools.test-dummy-namespace/bar) - (is (not (traced? 'clojure.tools.test-dummy-namespace/bar)))) - -(deftest test-trace-ns-does-not-trace-non-fns - (is (not (traced? 'clojure.tools.test-dummy-namespace/bar))) - (is (not (traced? 'clojure.tools.test-dummy-namespace/baz))) - (trace-ns trace-ns-test-namespace) - (is (traced? 'clojure.tools.test-dummy-namespace/bar)) - (is (not (traced? 'clojure.tools.test-dummy-namespace/baz))) - (untrace-ns trace-ns-test-namespace) - (is (not (traced? 'clojure.tools.test-dummy-namespace/bar))) - (is (not (traced? 'clojure.tools.test-dummy-namespace/baz)))) - -(deftest istraceable - (is (traceable? 'clojure.tools.test-dummy-namespace/bar))) - -(deftest test-clone-throwable - (let [stack-trace (into-array [(java.lang.StackTraceElement. "test-trace" "test-clone-throweable" "test-trace.clj" 123)]) - args ["test-arg"]] - (is (instance? java.lang.AssertionError (clone-throwable (java.lang.AssertionError. true) stack-trace args))) - (is (instance? java.nio.charset.CoderMalfunctionError (clone-throwable (java.nio.charset.CoderMalfunctionError. (Exception. "test")) stack-trace args))) - (is (instance? java.io.IOError (clone-throwable (java.io.IOError. (Throwable. "test")) stack-trace args))) - (is (instance? java.lang.ThreadDeath (clone-throwable (java.lang.ThreadDeath.) stack-trace args))) - (is (instance? java.lang.Throwable (clone-throwable (java.lang.Throwable. "test") stack-trace args))))) diff --git a/static/clojure-icon.gif b/static/clojure-icon.gif new file mode 100644 index 0000000..84eee16 Binary files /dev/null and b/static/clojure-icon.gif differ diff --git a/static/clojure.css b/static/clojure.css new file mode 100644 index 0000000..d40ea35 --- /dev/null +++ b/static/clojure.css @@ -0,0 +1,53 @@ + +body {margin: 0;padding: 0;background-color: #e3e3e3;border-top: 4px solid #b3ccfe;color: #272727} +body, .wiki, #Content, .wikipage {font-family: "Lucida Grande","Trebuchet MS","Bitstream Vera Sans",Verdana,Helvetica,sans-serif;font-size: 12px;line-height: 18px;} +#leftcolumn .wiki_link, #toc, #toc a, .toc-header {font-size: 11px;line-height: 18px;text-decoration: none} +img {border: 0;} +#AllContentContainer {max-width: 96em;min-width: 663px;background: #fff url(space/content-background.gif) right repeat-y;padding: 0 40px 18px 0;} + +#Header {position: relative;clear: both;overflow: auto;height: 110px} +#Logo {position: absolute;top: 0;left: 0;padding: 10px 0 0 62px;width: 138px;height: 100px} +#Header h1 {float: left;border: 0;margin: 0;padding: 0;position: absolute;top: 50;left: 200px; height: 60px} +#Header h1 a:link, #Header h1 a:visited, #Header h1 a:hover {color:#000000; text-decoration: none;} +#Resources {min-height: 110px;width: 234px;padding: 5px 0;float: right;border-bottom: 1px solid #abc4e2;background: #e4eaf7 url(space/resources-background.gif) repeat-y;overflow: auto;} +#Resources ul {margin: 0;padding: 0 25px;list-style: none;} +#ResourcesB {float: right;} +#Resources a {text-decoration: none;} +#Resources a:link, #Resources a:visited, #Resources a:hover, #Resources a:active {color: #4c5770;} +#Resources a:hover {text-decoration: underline;} + +#leftcolumn {margin: 0 0 0 22px;float: left;width: 168px;padding-bottom: 18px;background: #c5d2eb url(space/left-nav-bottom.gif) bottom no-repeat;} + +#leftcolumn ul {list-style: none;margin: 0;padding: 0;} + +#leftcolumn a, #leftcolumn .toc-header {font-weight: bold;display: block;background: transparent url(space/left-nav-divider.gif) repeat-x;padding: 6px 0 0 17px;margin: 12px 0 0 0;} +#leftcolumn li a {font-weight: normal;background:none;margin: 0;padding: 0 0 0 17px;} +#leftcolumn br {display: none;} +#leftcolumn .menu {margin-top: 14px;background: #fff url(space/left-nav-background.gif) repeat-y;} + +#leftcolumn a:link , #leftcolumn a:visited , #leftcolumn a:active {color: #666;} +#leftcolumn a:hover {text-decoration: underline;color: #222;} + +#rightcolumn {margin-left: 220px;} + +.wiki #toc {border: none;margin: 0 0 30px 18px;width: 222px;padding: 0 0 17px 12px;background: transparent url(space/toc-background.gif) repeat-y;border-bottom: 1px solid #d6d6d6;} +.wiki #toc h1, .wiki #toc div {margin: 0;padding: 0;} +.wiki #toc h1 {font-size: 14px;line-height: 18px;font-family: Georgia, "Times New Roman", Times, serif;font-style: italic;font-weight: normal;color: #969696;padding: 10px 0 8px 11px;} +.wiki #toc a:link, .wiki #toc a:visited, .wiki #toc a:active {color: #646464;} +.wiki #toc a:hover {background: none;color: #333333;} + +.wiki pre {font-family: Inconsolata, Monaco, Consolas, "Lucida Console", "Courier New", Courier, monospace;background-color: transparent;border: 0px;color: #000000} +#DesignedBy { clear: both; text-align: right; margin-top: 18px;} +#DesignedBy, #DesignedBy a, #DesignedBy a:link, #DesignedBy a:visited, #DesignedBy a:hover, #DesignedBy a:active { color: #999; } + +#WikiHeaderNavContainer { height: 36px; position: relative; } +#leftcolumn .WikiActions a {display: inline;} + +.comment { color: gray; } +.string { color: teal; } +.function { color: #00c; } +.macro, .specialops { color: #60c; } +.parens { color: #000; } +.keyword { color: #c09; } +.brackets { color: #006; } +.curlybrackets { color: #906; } diff --git a/static/favicon.png b/static/favicon.png new file mode 100644 index 0000000..b1653e8 Binary files /dev/null and b/static/favicon.png differ diff --git a/static/internal.css b/static/internal.css new file mode 100644 index 0000000..08ce7fb --- /dev/null +++ b/static/internal.css @@ -0,0 +1,18 @@ +/* *** MISC STUFF USED ALL OVER *** */ +.nowrap { white-space: nowrap; } +.hidden { display: none; } +tr td .sm { font-size: 90%; } +.grey { color: #666; } +.smgrey { color: #666; font-size: 80%; } +.grey a { color: #666; } +.textentry { font-family: arial, helvetica, sans-serif; border: 1px solid #999; } +.nopad { padding: 0; margin: 0; } +.bblack { color: #000; font-size: 1.1em; font-weight: bold; } +.bblacklight { color: #000; font-size: 1.1em; } + +/* IE6 min-height: http://www.dustindiaz.com/min-height-fast-hack */ +#content_view { display: block; padding-bottom: 2em; width: 100%; min-height: 600px; height: auto !important; height: 600px; } + +/* Used with .innerContentBox and #WikiAds to position the ad column */ +.contentBox { position: relative; min-height: 600px; height: auto !important; height: 600px; } + diff --git a/static/space/content-background.gif b/static/space/content-background.gif new file mode 100644 index 0000000..0786c72 Binary files /dev/null and b/static/space/content-background.gif differ diff --git a/static/space/left-nav-background.gif b/static/space/left-nav-background.gif new file mode 100644 index 0000000..e6e5904 Binary files /dev/null and b/static/space/left-nav-background.gif differ diff --git a/static/space/left-nav-bottom.gif b/static/space/left-nav-bottom.gif new file mode 100644 index 0000000..061c089 Binary files /dev/null and b/static/space/left-nav-bottom.gif differ diff --git a/static/space/left-nav-divider.gif b/static/space/left-nav-divider.gif new file mode 100644 index 0000000..1854e56 Binary files /dev/null and b/static/space/left-nav-divider.gif differ diff --git a/static/space/resources-background.gif b/static/space/resources-background.gif new file mode 100644 index 0000000..9657769 Binary files /dev/null and b/static/space/resources-background.gif differ diff --git a/static/space/toc-background.gif b/static/space/toc-background.gif new file mode 100644 index 0000000..0b7c95b Binary files /dev/null and b/static/space/toc-background.gif differ diff --git a/static/wiki.css b/static/wiki.css new file mode 100644 index 0000000..1cb1bdd --- /dev/null +++ b/static/wiki.css @@ -0,0 +1,22 @@ +/* Wiki Rendered Styles */ +.wiki { line-height: 150%; font-family: arial, helvetica, sans-serif; font-size: small; } +.wiki h1 { font-weight: bold; padding: 5px 0 0 0; margin: 0; font-size: 1.4em; } +.wiki h2 { font-weight: bold; padding: 5px 0 0 0; margin: 0; font-size: 1.3em; } +.wiki h3 { font-weight: bold; padding: 5px 0 0 0; margin: 0; font-size: 1.1em; } +.wiki h4 { font-weight: normal; padding: 5px 0 0 0; margin: 0; font-size: 1.066em; } +.wiki h5 { font-weight: normal; padding: 5px 0 0 0; margin: 0; font-size: 1.033em; } +.wiki h6 { font-weight: normal; padding: 5px 0 0 0; margin: 0; font-size: 1.0em; } +.wiki table { border-collapse: collapse; margin: 10px 0; font-size: small; } +.wiki p { margin: 0; padding: 0; padding: 5px 0; } +.wiki td { border: 1px solid #DDD; } +.wiki #toc { border: 1px solid #AAA; background: #fff; padding: 5px; margin: 0 0 10px 10px; width: 25%; float: right; clear: right;} +.wiki #toc h1 { font-weight: normal; font-size: 1.2em; padding: 0; } +.wiki #toc a:hover { color: #00D; background: #FFD; } + +.wiki hr { height: 1px; color: #AAA; background-color: #AAA; border: 0; margin: 0 10px; } +.wiki ul { padding: .5em 0 0 3em; margin: 0; } +.wiki ol { padding: .5em 0 0 3em; margin: 0; } +.wiki ul.quotelist { list-style: none; } +.wiki tt { font-size: small; } +.wiki img { border: 0; padding: 4px; } +