Counterclockwise 0.35.1

0.35.1 released on December 07, 2016

This is the first Counterclockwise version compatible with Clojure 1.9.

As a reminder, Counterclockwise now requires a JVM >= 8.

REPL

  • Fix the dependency on ccw.server by upgrading to version 0.2.1 which fixes the incompatibility with Clojure 1.9 forms destructuring

Counterclockwise 0.35.0

0.35.0 released on July 09, 2016

This is the first Counterclockwise version compatible with Eclipse Neon.

This version requires a JVM >= 8

Editor

  • Sometimes Hyperlinking would throw a NumberFormatException. Fix #850

REPL

  • The REPL View is now visible in all Perspectives, not only the perspective where it was opened. Fix #686

Issues

  • The java-resource-paths file finding strategy was considering folders as correct results which was wrong. Fix #847

Counterclockwise 0.34.0

0.34.0 released on August 21, 2015

Editor

  • Thanks to User Plugin ccw-plugin-hyperlink which is embedded by default, a new kind of hyperlink has been added: for opening relative or absolute files from literal Strings. Will search relative to the current location, to the java classpath root folders if java project, to the project root, or to the filesystem root. Use Cmd+Click or F3

Keyboard Shortcuts

  • Removed the default binding for the Show Active REPL View command since it does not work well with German keyboard (prevents from typing @)

Issues

  • When starting arbitrary Leiningen command through Alt+L L, there was a possibility that the command hang forever. Fix #840

Counterclockwise 0.33.0

0.33.0 released on August 5, 2015

Editor

  • double-click when in code now does the same as if the user had triggered the Expand Selection Right command. The net result is that you can select entire forms by double clicking on their start character ; you can also select entire symbols even if there are hypens inside, etc. Fixes #516

Process Launcher

  • Fix an issue on OS X to preventively fix the PATH environement variable which is generally not even set with /usr/local/bin included. Fixes #709

  • Launching a new REPL now works similarly from within an editor or from the contextual menu of a clojure file: the editor content or file content is loaded, and the REPL switches to the corresponding namespace. Fixes #833

Preferences

  • Fix spurious exceptions thrown after having changed text color preferences

Counterclockwise 0.32.0

0.32.0 released on July 29, 2015

  • Note that Counterclockwise drops Eclipse 3.x support, and now only supports Eclipse 4

  • This release upgrades the embedded Leiningen from 2.5.0 to 2.5.1.

Support of Clojure 1.7.0

  • Fix bug preventing to go to symbol declaration (upgrade of ccw.server version to 0.2.0)

  • Preference to revert printing of namespaces and exceptions in the REPL to the 1.6.0 behavior

Support for cider-nrepl in the REPL

cider-nrepl and Clojure projects

cider-nrepl ( https://github.com/clojure-emacs/cider-nrepl ) is a community effort to provide editor-agnostic nREPL middlewares.
CCW is now able to use cider-nrepl middlewares for providing the same features available in the ccw.server lib, though not all features of cider-nrepl are exposed by CCW yet.

  • There is a Clojure Preference Preferences ▸ Clojure ▸ General ▸ Launch REPLs with cider-nrepl that is turned on by default.

  • This Preference automatically creates a cider-nrepl enabled REPL when you use the Clojure launchers via Run as …​ menus or contextual menus or keyboard shortcuts (e.g. Ctrl+Alt+S)

  • Note that if CCW detects cider-nrepl in the project classpath, then the project version will be used.

  • This works both for Leiningen projects or any Java project having the Clojure jar in their classpath.

Warning
CCW only works with cider-nrepl > 0.9.1

cider-nrepl and Clojurescript projects

More manual work is required if your project also has ClojureScript.

First add cider-nrepl and piggieback support for your project:

(defproject ...
  ;; cider-nrepl support
  :plugins [[cider/cider-nrepl "0.9.1"]]
  ; piggieback support for clojurescript nrepls
  :profiles {:dev {:dependencies [[com.cemerick/piggieback "0.2.0"]
                                  [org.clojure/tools.nrepl "0.2.10"]]
                   :repl-options {:nrepl-middleware
                                  [cemerick.piggieback/wrap-cljs-repl]}}})

Then you can a REPL in Counterclockwise as usual, e.g. from the project’s node or some clojure file.

Then invoke piggieback to start a Clojurescript REPL. Here’s an example with a Rhino REPL:

(cemerick.piggieback/cljs-repl (cljs.repl.rhino/repl-env))

The REPL is now a Clojurescript REPL. You now get code completion and documentation from the Clojurescript environment.

REPL View

  • If the REPL requires an input from the user, no blocking (modal) popup is used anymore. Instead, the Input Area is refocused to send its next content to in via the appropriate nREPL op.

  • The result of the evaluated form will be pprinted when it is possible to use pprint (currently only if cider-nrepl is enabled).

  • A new Preference has been added to Preferences ▸ Clojure ▸ REPL View for disabling the use of pprint

Editor Hover Framework

  • Two hovers added: "Macro expansion" (using macroexpand, Ctrl) and "Recursive macro expansion" (using macroexpand-all, Ctrl+Shift), both leveraging cider-nrepl wrappers if found.

  • New preference page for CCW hovers under Preferences ▸ Clojure ▸ Editor ▸ Hovers. Keyboard modifiers can now be set for each hover.

  • Eclipse Extension point for third party plugins to contribute new kinds of hovers (see the ccw.core.cljEditorTextHovers extension point and the ITextHover interface)

User Plugins

Counterclockwise now ships with some User Plugins out of the box. In this release, the following User Plugins are included: - Hello World - https://github.com/ccw-ide/ccw-plugin-hello-world - Zoom - https://github.com/ccw-ide/ccw-plugin-zoom - User Plugins Manager - https://github.com/ccw-ide/ccw-plugin-manager - ANSI Colors in REPL - https://github.com/ccw-ide/ccw-plugin-ansi-repl For the ANSI Colors plugin to work, one needs to install the ANSI EConsole Eclipse plugin from the Market Place. The ANSI EConsole plugin is embedded with CCW/Standalone.

In case you have already checked out a User Plugin in you ~/.ccw/ folder, yours will always take precedence over the one embeded in Counterclockwise (as long as you’ve kept the same directory name).

  • Faster Eclipse Startup: with lots of user plugins installed, CCW used to freeze while the user plugins where launched. They are now launched in the background.

  • The keybinding cleaning function did concurrent modifications of an Eclipse Internal collection. Fix laurentpetit/ccw-plugin-manager#1

  • The keybinding cleaning function had a bug which made keybindings seem to erratically work. It has been fixed

Documentation

  • Add a mention about keyboard binding for switching between default and strict editing modes ( Alt+D ). Fixes #346

Leiningen Support

  • Embedded Leiningen version upgraded from version 2.5.0 to 2.5.1

New Namespace Wizard

  • Better support for opening with the editor files ending with clojure extensions: cljs, cljx, clja, cljc

  • Better support for extension via User Plugins: creation of namespace ccw.wizards.new-namespace

Miscellaneous Fixes

  • New Clojure Project Wizard honors the 'use previous location' checkbox. Fixes #682

  • When launching a REPL for a project it a REPL is already running for it, there is now no exception thrown when accepting to reuse the existing one

  • Code completion works even if there’s a comment at the end of the document. Fixes #777

  • When creating a leiningen project, the dependencies were updated twice. Fixes #817

  • Editor code completion suggests Clojure special forms (do let etc.) appropriately. Fixes #823

  • Editor hippie completion a little faster by removing unnecessary intermediate sort (probably negligible, but he, clojurers know the value of things ;-)

Miscellaneous Enhancements

  • Print maven coordinates of Counterclockwise dependencies at plugin startup in .metadata/.log. Fixes #741

  • Launching REPLs from launch configurations now correctly opens up a REPL View if the process outputs an nrepl URL in the stdout Console

  • Namespace Browser now opens external files correctly when double clicking on a var label (e.g. will open internal Eclipse files, user plugin files, etc.)

Counterclockwise embedded nREPL

Counterclockwise ships with an embedded nREPL server. The following enhancements have been applied:

  • New Command Line option -Dccw.nrepl.port=[1-65535]: allows to select the embedded nrepl port.

  • Command Line option ccw.autostartrepl has been renamed to ccw.nrepl.autostart.

  • When Command Line option ccw.autostartrepl is specified, the cider-nrepl middleware is used instead of the nRepl default middleware.

Counterclockwise Testing

  • Clojure ▸ Test → Generator…​ shows the SWTBot generator which monitors UI events as they are performed and then generates pieces of code that can be reused later in automated tests.

Counterclockwise/Standalone

  • Adjusted JVM parameters to have a faster startup (-server, -Xverify:none, -Xms256m -Xmx1024m)

Counterclockwise 0.31.2

0.31.2 released on December 4, 2014

User Plugins

  • Added namespace ccw.api.markers for managing resource markers. Resource markers typically appear in the editor margins (error markers, warning markers, tasks, bookmarks, etc.), and in their respective problem views, task views, bookmark views, etc.

Example: creating a new type of marker ccw-plugin-clj-lint, simply inheriting from Eclipse-provided Problem markers (implicit inheritence if not provided), with markers that will persist across Eclipse restarts. Then creating a marker for some imaginary foo.clj file, located in project my-project, in subfolder src/bar/

(require '[ccw.api.markers :refer (register-marker-type! create-marker!)])
(require '[ccw.eclipse     :refer (workspace-resource)])

(register-marker-type!  {:id "ccw-plugin-clj-lint", :persistent true})

(create-marker!
  (workspace-resource "my-project/src/bar/foo.clj")
  {:type        "ccw-plugin-clj-lint"
   :severity    :warning
   :line-number 2
   :message     "The variable baz is unused."})

Counterclockwise 0.31.1

0.31.1 released on December 4, 2014

Fix

  • Editors which were open when exiting the IDE would break when reloading. Fix Issue #678 - Error trying to edit a Clojure source file, after upgrading to v0.31.0

User Plugins

commands

  • The Eclipse context is now wrapped. The wrapper extends ILookup. This allows the Eclipse context to be destructured easily. The original Eclipse context is available with the key "org.eclipse.e4.core.contexts.IEclipseContext" or ":eclipse-context" for advanced usages.

  • The concise form of defcommand now accepts that argument vectors be empty as an alternative to having the context argument

Examples:

; version with 0 arguments (not interested of using the eclipse context)
(defcommand switch-to-repl "Switch to the REPL View" "Cmd+R S"
  [] (repl/show-repl))

; version with the context argument without destructuring
(require '[ccw.core.e4.model :as m])
(defcommand zoom-in "Zoom the text in" "Cmd++"
  [context] (zoom (m/context-key @m/app :workbench) 2))

; version with the context argument and destructuring
(defcommand zoom-in "Zoom the text in" "Cmd++"
  [{:keys [workbench]}] (zoom workbench 2))

REPL

  • Added function ccw.api.repl/show-repl for bringing to front / optionally giving focus to a (or the last active) REPL. Demonstration of the feature for creating a new command in the [ccw-plugin-repl](https://github.com/laurentpetit/ccw-plugin-repl/) user plugin, in script file repl-keybindings.clj.

Counterclockwise 0.31.0

0.31.0 released on December 4, 2014

Fix

  • Removed lots of workspace locks when managing leiningen dependencies (after importing a project, after editing project.clj) which were really annoying because it was then impossible to save a file because the background leiningen job had a lock on the workspace. Fix #Issue 671 - Update leiningen dependencies should not block the workspace that long

  • Eclipse source folders could not be correctly set when some Leiningen plugins were placing jar files external to the project in the source folders list. Fix Issue #675 - Could not reset project classpath NPE

User Plugins

Feature

  • Added namespace ccw.api.repl for use by user plugins. Related to REPL management (sending expressions for evaluation, getting/setting the current namespace).

  • Added namespace ccw.events which is a thin wrapper around Eclipse 4 IEventBroker, allowing User plugin developers to subscribe to topics, post / send data to topics.

  • defhandler now accepts closures in addition to var symbols.

  • in defkeybinding, Cmd is now an alias for M1, thus making it OS portable (Cmd will be replaced to COMMAND for OS X, and Ctrl for Windows/Linux). If you really insist on being specific, you can you COMMAND or CTRL which are not interpreted.

Fix

  • commands/handlers/keybindings were not properly removed when all user plugins were removed at once (e.g. ~/.ccw/ was renamed to ~/.ccw-disabled)

  • defhandler does not create a new var named after the command (with a '-handler' suffix) anymore

  • defkeybinding correctly interprets the :context key

  • defkeybinding a bad :context value could break binding tables. This is fixed, an error is reported on stdout and the :window context is used as a default

Editors

Everytime a Clojure editor is saved, a map with the namespace String, the absolute file path and the active REPL if there is one is posted to the Eclipse 4 Event Broker to the "ccw/editor/saved" topic (just use :ccw.editor.saved in your user plugins to refer to the topic, the conversion is automatic).

REPLs

Everytime a response is received from an nrepl connection, the response data is posted to the Eclipse 4 Event Broker to the "ccw/repl/response" topic (just use :ccw.repl.response in your user plugins to refer to the topic, the conversion from :ccw.repl.reponse to "ccw/repl/response" is done by ccw.events functions).

Counterclockwise 0.30.0

0.30.0 released on November 16, 2014

This release fixes bug in the 0.29.1 release.

It has not been labelled 0.29.2 because one fix involved a new way of building the CCW/Standalone Product.

Fix

  • There were java.lang.ExceptionInInitializerError caused by: org.eclipse.swt.SWTException: Invalid thread access errors at Eclipse startup, caused by (import) calls in Clojure loading JDT classes static initializers too early. This has been fixed by changing the way Preferences are fetched from the JDT.

  • Race conditions between the Automatic Clojure Nature adder and m2e initializing its classpath containers.

CCW/Standalone Product

  • The CCW/Standalone Product is built differently than before. Hopefully for the better. I’ve followed the way e.g. the voclipse IDE by Vogella is built.

  • Fixed some lifecycle exceptions when Eclipse is closed. Not really problematic, but was filling the logs.

  • Added CCW / Luna Release / Luna Updates / Eclipse Color Themes repositories to Software Update Sites list

  • Changed the default proposal for the workspace: instead of locating it inside the Eclipse folder, suggest $user.home/ccw-settings

Leiningen

  • New preference Preferences ▸ Clojure ▸ General ▸ Leiningen jar for selecting a leiningen jar to use instead of the one embedded with Counterclockwise.

Project creation wizard

The project does not suggest the Eclipse workspace as default location anymore.
Instead, the last value for the location field is suggested.

Counterclockwise 0.29.1

0.29.1 released on November 13, 2014

Fix

  • The :repositories Leinineng key was not currectly respected since the source files addition. Fix Issue #653 - Issue 653: Wrong error reports for dependency resolution, as well as issue reported on mailing by Alexander Taggart.

  • Counterclockwise was too chatty when files were dragged from the filesystem (e.g. dragging jar files was triggering the 'do you want to create a leiningen project?' popup).

  • Counterclockwise was triggering many times the 'do you want to create a leiningen project?' popup after a user declined or failed drag.

  • The letfn form is indenting correctly the definitions of named functions inside the definition vector. Fix Issue #439

  • Fix Issue #666 - Some :repository declarations in project.clj cause

  • Make Leiningen created projects honor the Java Preference Java > Build Path > Output folder name.

Counterclockwise 0.29.0

0.29.0 released on October 20, 2014

This release is mostly a maintenance release. It is also the first release embedding Leiningen 2.5.0 instead of Leiningen 2.3.4.

Fix

  • Removed default keybinding Alt+Command+Q E for command 'New REPL client for Eclipse embedded nrepl server (advanced usages) which was conflicting with a JDT command

  • Fixed Convert to Clojure Project when one wants a quick & dirty way to add clojure jar to a project classpath

  • Dragging a leiningen project already placed inside the workspace folder now works (was throwing an exception previously)

Enhancements

  • Embedded Leiningen version upgraded from version 2.3.4 to 2.5.0

  • Leiningen Automatic detection now works only if the project does not already have Java Classpath metadata set (technically speaking: if the project does not have the Java Nature).

  • Added command Remove Leiningen Support to the Leiningen contextual menu. Removes the Leiningen Support, but will not touch the project’s Java build path. Fix Issue #663.

  • REPL View visual hint (<type clojure code here>) is displayed according to the Preferences ▸ Clojure ▸ REPL View ▸ Show hints Preference. Fixes #662 - Toggle REPL hint (Settings)

Counterclockwise 0.28.1

0.28.1 released on September 28, 2014

Fix

  • Drag & Drop from Github / Bitbucket / Google Code URLs works in Linux

Enhancements

Leiningen / Clojure autodetection

  • Added a check for missing .classpath file for Leiningen projects. Automatically reconstruct the java build path if it is missing.

  • Better User feedback for Drag & Drop folder actions

Counterclockwise 0.28.0

0.28.0 released on September 25, 2014

Enhancements

Automatic configuration of Leiningen Projects

In reaction to a project creation which contains a project.clj file, or an existing project modification consisting in adding a project.clj file, etc., CCW will by default react by adding the Leiningen Nature to the project. Meaning you’ll see the Leiningen Dependencies Classpath Container appear in the project, and be able to launch it as a Leiningen project.

This feature can be disabled globally via the Preferences ▸ Clojure ▸ General ▸ Automatic detection of Clojure/Leiningen projects preference

Project Drag and Drop from OS to Counterclockwise

It is possible to drag a project folder project from Windows Explorer / Finder onto Eclipse / Counterclockwise. Any Leiningen project found within the dragged folder(s) will automatically be created ; and configured appropriately if automatic configuration is enabled.

Project Drag and Drop from Github / Bitbucket / Google code to Counterclockwise

It is possible to drag a Github / Bitbucket / Google code project URL from your browser to Eclipse / Counterclockwise. The standard Eclipse Git Import wizard will be open, pre-filled with repository information.

Once the project has been cloned, just select the Create a general Project option: a general project will be created, and if Automatic configuration is enabled, recognized as a Leiningen Project.

REPL Text Input Area visibility

  • The REPL View shows a visible separation between the log area and the text input area

  • A <type clojure code here> placeholder is also visible when the input area doesn’t have the focus

Fix Issue #560

Bug fixes

  • Leiningen dependencies are updated in the background. They do not block the UI until they’re finished anymore.

Counterclockwise 0.27.1

0.27.1 released on August 28, 2014

Bug fixes

  • Fix Issue with Eclipse Kepler (race conditions on plugin startup). Fix Issue #652 - should also prevent some other problems as well

  • Fix Issue with Namespace Browser View which was broken in version 0.27.0

Counterclockwise 0.27.0

0.27.0 released on August 21, 2014

Enhancements

Dependencies source jars downloaded

If source jars for dependencies are available on the repositories, they are downloaded and set up on the Leiningen Dependencies classpath container. (Thank you Zhang Yaokun - aka paxnil on Github - for the pull request!)

Debugging Clojure Projects

  • It is now possible to add breakpoints on cljx files in addition to cljs files.

  • Breakpoints open the right files (those in source folders, not in bin/ folder) when leiningen is used to debug the project - i.e. the default behaviour - (was only working when project was started directly by Eclipse)

  • Breakpoints correctly pick the right files, e.g. they do not mess with multiple core.clj files in the project classpath. Fixes Issue #273

Bug fixes

  • Don’t activate Leiningen commands in wrong places in the IDE (e.g. in unrelated contextual menus). Fix Issue #642

  • In CCW/Standalone, one can succesfully Open Window ▸ Preferences ▸ General ▸ Appearance whereas an error occured previously. Fixes Issue #646. Thank you Andrea Richiardi for filing the Issue and finding the relevant resources which helped me to fix it quickly!)

  • Fixed race conditions during Eclipse startup between CCW and the JDT indirectly starting the DebugUIPlugin while the workbench has not been created yet (why the stack towards getting a JDT classpath check leads to trying to start the DebugUIPlugin in Eclipse is an exercise left to the reader). Fix Issue #651

Counterclockwise 0.26.0

0.26.0 released on July 10, 2014

Enhancements

New Clojure Wizard

The wizard now accepts lein new template arguments. Simply put them after the template name.

REPL

  • Adds preferences for REPL history - Contributed by Gunnar Völkel

  • Preference for REPL history size.

  • Preference for REPL history persistence schedule.

  • zombie REPLs (when connection is lost)

  • are automatically disabled (buttons and text grayed, input area non editable)

  • and won’t be used for sending code from editors

Bug fixes

  • New Clojure namespace wizard now works with fully qualified namespaces, pre-fills the input text with the currently selected package name and creates missing packages on the fly. Fix Issue #468

  • New Clojure namespace wizard now accepts file starting with numbers. Fix Issue #466

  • Correct indenting of new threading macros, as→ cond→ some→. Fix Issue #554

  • F3 Navigate to Definition was not working for single segment namespaces. Fix Issue #572 (Thanks isto.nikula for the patch!)

  • Upgraded missing dependency on ccw.server 0.1.1 which is where the fix for Code Completion not succeeding sometimes is located!

  • REPL View: Better handling of cursor movement in output area of REPL. Fix Issue #529

  • You can use arrow keys, copy keys in the REPL output area

  • You can use Tab key to switch to the REPL input area

  • REPL View accepts the Drawbridge protocol, thus allowing http(s)://<server>:<port>/repl or http(s)://<user>:<password>@<server>:<port>/repl URLs. Fix Issue #501

  • REPL View does not open and give proper error message if connection is not possible (e.g. Drawbridge HTTP 401)

  • Outline View: There were unexpected exceptions thrown depending on the content of the Editor. These were due to java.lang.Comparator contract violations. Fix Issue #639

  • Editor: In strict/paredit mode, forward/backward delete do not prevent to remove in front of () or {} or "". Also, fixed a bug where forward delete allowed to remove ( or { or " if there was a leading . Fix Issue #523

  • Also changed a behavior: the cursor is not stuck, either something is deleted, either the cursors moves forward or backward

Counterclockwise 0.25.2

0.25.2 released on May 17, 2014

Bug fixes

  • Upgraded dependency on ccw.server 0.1.1 which is where the fix for Code Completion not succeeding sometimes is located!

Counterclockwise 0.25.1

0.25.1 released on May 17, 2014

Explicitly running leiningen headless

When Preference Clojure > General > Launch Leiningen projects with Leiningen is unchecked, then Run as for the project will use the Eclipse Project Settings, not the Leiningen project settings. And Leiningen will not be used to launch the project.
But still, users have reported that there is a need for a command for explicitly launching the project via Leiningen.

Thus the "Headless Leiningen REPL" command has been resurrected. You can find it in the Leiningen contextual menu, or invoke it via the Alt+L H Keyboard Shortcut.

Bug fixes

  • Error on load file in REPL, due to spaces in path introduced in 0.25.0. Thank you alzadude for the Pull Request!

  • Project wizard issue if you (only) unselect the default location checkbox. Fix Issue #637

  • Code Completion would not succeed sometimes and NullPointerExceptions would be logged instead. Fix Issue #631

Counterclockwise 0.25.0

0.25.0 released on April 25, 2014

Counterclockwise now uses Clojure 1.6.0 internally instead of 1.6.0-alpha3 before.

Launch startup time

The launch startup time of leiningen projects has been slightly improved by using more appropriate JVM flags (inspired by the ones used by the leiningen shell script).

Bug fixes

AOT Compilation very slow, and / or freezing the UI

There was kind of an incompatibility between CCW and Leiningen. In short, CCW uses the :injections project key to inject nrepl server code, and this code is also injected by leiningen when AOT compiling in subprocesses. The server code was creating futures, thus preventing the AOT compilation process to shutdown in due time.

The problem of UI freeze has also been globally addressed by improving the launcher code.

Console View stealing focus from REPL View

With the new Leiningen Launcher, the Console View was systematically stealing focus from the REPL View, because it was (deterministically) outputting the REPL server port after the REPL View was started and focused on.

This improper behavior was a consequence of the use of an acknowledgement socket between the nrepl server and the nrepl client. Leiningen gets the nrepl port after the acknowledgement has been done by the nrepl server library. So it cannot be changed to output the nrepl port before nrepl sends it back via the acknowledgement socket.

The solution which has been retained is to stop using acknowledgement sockets for getting the repl port back.
From now on, CCW relies on Leiningen outputting the nrepl port on its stdout (using the nRepl URL format).

To remain compatible with this behavior (and simplify the code internally), the regular Clojure launcher has been enhanced to also output the nrepl URL to stdout.

The console stack trace hyperlinks where wrong if the namespace was separate in several files loaded from the main namespace file. Fix Issue 634 - Clicking links in stacktraces bring you to the file of the namespace, not the file with the code causing the crash

Bad interaction between Counterclockwise and Maven m2e plugin

Counterclockwise Automatic detection of Clojure projects and Maven m2e Update Maven projects on startup preferences do not play well when both set to true. Counterclockwise code has been carefully audited and updated to prevent IResource locks, but the problem remains anyway. It is strongly suggested to not use m2e Update Maven projects on startup. Fixes Issue #633

Counterclockwise 0.24.2

0.24.2 released on April 11, 2014

Bug fixes

Namespace code being loaded twice at startup

When CCW launches a REPL for a Leiningen project, it uses lein repl :headless. This leiningen task will, by default, try to load the namespace declared via the `[:main]`path in project.clj map (if no other namespace has been explicitly defined by the user via the `[:repl-options :init-ns] path). This magical side-effect is undesirable as default behavior, and can cause the namespace code to be loaded twice if the REPL is invoked via its source code editor. This can be problematic for certain codebases.

CCW fixes this by dissocing the :main key in the project.clj map used to start the nrepl :headless server.

Enhancements

Preference for controlling run/debug default launch mode

Since version 0.24.0, commands indirectly loading a REPL automatically (e.g. invoking load file in Clojure REPL when there is no active REPL) invoke the launcher in Debug mode (allowing to put breakpoints in the code for instance).

This behavior can be changed globally via a new preference: Clojure > General > Launch REPLs in Debug mode (thus checked by default)

Preference for allowing Leiningen projects to be launched as regular java projects

Preference Clojure > General > Launch Leiningen projects with Leiningen (uncheck to launch them via default java launcher) has been added.

By default, Leiningen projects will be launched by invoking leiningen repl :headless. By unchecking this preference, Leiningen projects will be launched as would regular java projects detected as Clojure project (the behavior before 0.24.0).

Motivation: some users have reported real blocking issues which cannot be addressed in this release:

  • Eclipse crashes under some circumstances (will be addressed soon)

  • Leiningen launcher way longer to start than default java launcher, and for projects requiring repeated restarts, this is a no-no. This second point may be addressed by leveraging the trampoline behavior of Leiningen.

When both of these issues are addressed, removing this Preference from the GUI may be considered.

Counterclockwise 0.24.1

0.24.1 released on March 30, 2014

Bug Fix: The System environment was not correctly passed to the launched project process, causing all sorts of trouble (X Window session not found, java.io.tmpdir not set correctly, etc.)

Counterclockwise 0.24.0

0.24.0 released on March 20, 2014

REPL launcher revisited

The command "Headless Leiningen REPL" introduced in a recent release works well, so it has been set as the default behaviour for starting a new REPL for Leiningen projects.

This means that for Leiningen projects, Ctrl+Alt S (resp. Cmd+Alt S for OSX), or 'Run/Debug as Clojure Application' will truly use Leiningen under the hood to start a headless REPL for the project.

Also now by default, keyboard shortcut Ctrl+Alt S starts the project in debug mode and automatically connects Eclipse to the projects JVM debugger.

Generic Leiningen Launcher

  • Ensure all JVMs created by Leiningen are killed when the main process is killed via the Console "Terminate" button.

  • "Headless Leiningen REPL" command Alt+L H has been removed now that it is the default behaviour for starting Leiningen projects

Counterclockwise/Standalone

  • For Linux/Windows, the zip now contains a root folder named Counterclockwise-<version>

  • For OS X, the zip now contains a root folder named Counterclockwise-<version>.app ; it is thus recognized as an OS X Application folder

Counterclockwise 0.23.0

0.23.0 released on January 23, 2014

Fixes the compatibility problems with Eclipse Indigo!

Counterclockwise/Standalone

  • It is now possible to use the usual Software Update Site to upgrade a Counterclockwise/Standalone install with new versions of Counterclockwise.

  • The version is now displayed in the Counterclockwise About Dialog.

  • The Products zips filenames now contain the version

Documentation

Installation section

  • now mentions the Counterclockwise version number (in the text, and the corresponding links)

Counterclockwise 0.22.0

0.22.0 released on January 10, 2014

Leiningen Upgrade

The embedded Leiningen has been upgraded from version 2.1.2 to a patched 2.3.4.

Automatic opening of REPL Views

The patch applied to Leiningen 2.3.4 relates to the lein repl task: in addition to displaying a human readable info about the nREPL server’s port & host, it appends a nREPL URL.

Before:

nREPL server started on port 61149 on host 127.0.0.1

After:

nREPL server started on port 61149 on host 127.0.0.1 - nrepl://127.0.0.1:61149

This nREPL URL is automatically converted to an hyperlink in the Console View.
And even more: the first time a nREPL link appears in a Console View, Counterclockwise automatically opens a REPL View for it!

Shortcut for starting a Headless Leiningen REPL

Alt+L H is a shortcut for launching a headless leiningen REPL. It is similar to doing Alt+L L + typing your-project $ lein repl :headless.

Shortcut for resetting the Project Classpath

Alt+L R resets the project classpath, using Leiningen to compute the classpath.

Leiningen classpath more permissive

Resolving leiningen classpath is now more permissive

Overlapping source paths are allowed

Overlapping :source-paths, :resource-paths, :test-paths and/or :java-source-paths are accepted. Counterclockwise resolves the conflict by adding the required exclusions to its source classpath entries.

For instance, if you have declared (explicitly or implicitly) both resources and resources/public as resource paths, Counterclockwise will create 2 source path entries:

  • one for resources/public,

  • and one for resources, with an exclusion filter for its public subfolder

Missing source paths are not reported as errors anymore

All paths are marked as 'optional' so that if folders for these paths are missing, no exception is reported by Eclipse.

Counterclockwise 0.21.0

0.21.0 released on January 9, 2014

General purpose Leiningen task invoker

Addition of a new command, Alt+L L for launching a popup allowing to enter an arbitry leiningen command.

It allows you to launch arbitrary leiningen tasks from within Eclipse.

New Clojure Project Wizard

The Wizard has been modified to simplify the understanding of its fields. Especially, the "Use default location" field has been replaced with a "Create project folder in:" field, and its meaning has changed from "ask the user for the project’s folder on the filesystem" to "ask the user for the project’s parent folder on the filesystem (assuming that the project folder will be the project name)". This is wayyy more intuitive.

The "Working Sets" section of the Wizard has been removed. Instead, the newly created project is automatically added to the currently active Working Sets.

Editor responsiveness

Timeouts have been added for all Counterclockwise interactions with the nREPL connection of a REPL View.
Nothing should prevent the user to type in an Editor. Counterclockwise should gracefully downgrade its features instead. This is a step in this direction.

  • Code completion: 1 second timeout. If timeout occurs twice for a given REPL, it won’t be used anymore (only static code completion will take place).

  • Text Hover: 1 second timeout.

  • Hyperlink Detection: 1 second timeout.

  • Namespace Browser: 15 seconds timeout.

  • REPL: 15 seconds timeout at some initialization usage of the nrepl client

"Load File" in Editor

"Load File" action now works for editors opened via File ▸ Open File…​ (aka arbitrary file on the filesystem, not necessarily living inside a project inside the Eclipse Workspace)

User plugins

It is possible to contribute Counterclockwise User Plugins inside folder ~/.ccw.
This will be a way both: - for users to contribute / experiment more easily to Counterclockwise - for the Counterclockwise team to provide beta features for rapid user feedback

INFO: a User Plugin is dynamic. To remove it, just remove it.

A whole new section of the documentation has been added concerning User plugins. See http://doc.ccw-ide.org/documentation.html#_user_plugins for the full story.

Warning
Works only with Eclipse 4 and CCW/Standalone.

Experimental User Plugin: "Plugin additions"

This plugin adds commands for managing User Plugins (sorry, it’s a little bit meta):

  • Alt+U S - re[S]tart user plugins (will reload all user plugins code)

  • Alt+U N - create a [N]ew user plugin (will prompt you for a plugin name, create the plugin folder/file, a project in the workspace, and open a repl connection to your Eclipse instance)

  • Alt+U I - Import all user plugins present in ~/.ccw as projects in workspace

The plugin is available as a Gist, you can examine its content here https://gist.github.com/laurentpetit/7924786 and then clone its repository https://gist.github.com/7924786.git in ~/.ccw/plugin-additions

git clone https://gist.github.com/7924786.git ~/.ccw/plugin-additions
# Restart your Eclipse

nREPL Version Update

The embedded nREPL client in Counterclockwise, and which is also used to serve as nREPL client when the project does not declare a dependency on nREPL (the majority of the cases) has been upgraded from version 0.2.1 to 0.2.3.

Bug fix

  • Explicitly ask the user for confirmation before launching a second process for the same project

Leiningen based Launcher

The code is there, but not active at the moment (needs more love / hammock)

CCW/Standalone

Changed the URL for downloading the stable standalone versions: http://standalone.ccw-ide.org/

Increased the MaxPermSize value from 128Mb to 256Mb, since there has been reports that 128Mb weren’t enough, e.g. when invoking the New Clojure Project Wizard.

Fix of an issue with the pre-referenced software update sites (was still pointing to Indigo instead of Kepler)

Moar sensible default preferences:

  • Editors

    • line numbers displayed in the margin

    • 80 chars column displayed

    • tabs automatically replaced by spaces when typing

  • Worskpace

    • automatic refresh of the Workspace resources without asking the user

Counterclockwise 0.20.0

0.20.0 released on October 10, 2013

TL;DR

  • 0.20.0 introduces no breaking change

  • New Software Update Site http://updatesite.ccw-ide.org/stable

  • Editor: new awesome autoshift feature, slurp/barf paredit commands support

  • Lots of changes to fix stability concerns and various issues

Build Process totally rewritten

For people wanting to build Counterclockwise from scratch, or to work with Counterclockwise.

The Build Process now uses Maven + Tycho.

  • It is now fully automated, from fetching Eclipse or non Eclipse dependencies, to building an update site for the codebase, to building Standalone Counterclockwise products for the codebase.

In a nutshell:

git clone https://github.com/laurentpetit/ccw
cd ccw
mvn verify
cd ccw.product/target/products # the products for Windows / Linux / OS X
cd ../../../ccw.updatesite/target/repository # the Software Update Site

For more information on installing a full-fledged dev environment, see the Wiki Page How To Build

New Software Update Site

The software update site has been updated to its new location:

For more information on the available Software Update Sites and their retention policies, and more, see the Wiki Page Update Sites

Editor

Reindent Selection

Reindent Selection has been implemented. Trigger it via Ctrl+i on Windows/Linux, Cmd+i on OSX.

Autoshift

While you type, the code on the following lines which depends upon the code on the current line is shifted to the right or to the left. More spaces/less spaces are added/removed automatically.

  • For instance, if you have the following manually indented code (note that the call to the cond macro is indented 4 extra spaces to the right):

    (defn foo [bar baz]
           (cond
             cond1
               expr1
             cond2
               expr2
             :else
               default-expr))
  • You can fix the whole indentation by either placing the cursor anywhere in the (cond line and typing Tab, or in front of (cond and typing Backspace 2 times:

    (defn foo [bar baz]
      (cond
        cond1
          expr1
        cond2
          expr2
        :else
          default-expr))
  • Before the AutoShift feature, you would either have to indent each line manually, or select the whole (cond..) form and type Ctrl+i (OS X: Cmd+i), but you would have lost the specific indentation of the conditions/expressions:

    (defn foo [bar baz]
      (cond
        cond1
        expr1
        cond2
        expr2
        :else
        default-expr))

More intuitive Ctrl+Enter

Hitting Ctrl+Enter when the cursor is located at the top level selects the preceding top level form to be sent to the REPL. Only when the cursor is right in front of a top level form will it be selected instead of the previous one. (Fix Issue #580)

e.g. if the caret is materialized with the symbol |:

(defn foo [] ...)|
(defn bar [] ....)
;; => foo's declaration will be sent to the REPL
(defn baz [] ...)
|(defn qix [] ...)
;; => qix's declaration will be sent to the REPL

Slurp / Barf

Slurp and Barf, 2 important paredit/structural manipulation features, have been added to the Editor. (Fixes Issue #486: Add support for barfage and slurpage)

+ See the Keybindings documentation for Slurp / Barf : https://code.google.com/p/counterclockwise/wiki/EditorKeyBindingsFeatures

  • Fixed wrong keybinding for switching Rainbow Parens: "Cmd+( R" instead of "Cmd+(R" (replace Cmd by Ctrl for Windows/Linux ; space indicates that you first type Cmd(, then type R)

  • Changed "toggle line comments" behaviour: before, if the selection had both commented and uncommented lines, it was an ambiguous case resolved by just doing nothing. Now, it is resolved by counting the number of commented and uncommented lines. If the number of uncommented lines in the selection is equal or greater than the number of commented lines, then those uncommented lines are commented. If the number of commented lines is greater than the number of uncommented lines, those commented lines are uncommented.

    Calling "toggle lines comments" on the following code selection:

    ;(defn foo [....])
    (defn bar [....])
    (defn baz [....])

    will result in:

    ;(defn foo [....])
    ;(defn bar [....])
    ;(defn baz [....])

    But calling "toggle lines comments" on this code selection:

;(defn foo [....])
(defn bar [....])
;(defn baz [....])

+ will result in:

(defn foo [....])
(defn bar [....])
(defn baz [....])
  • Auto indentation of a cond form changed: (Fixes #592)

    ;; from
    (cond test1 expr1
      test2 expr2)
    ;; to
    (cond test1 expr1
          test2 expr2)
  • Experimental Feature: enabling auto-reevaluation of last command typed in the REPL, after a successful evaluation from the Editor

    • when the "repeat last expression" REPL command is active

    • when the user sends a form tom evaluate to the REPL

    • if the form evaluated without error

    • then the last expression evaluated from the REPL input is evaluated again

      A common usecase for this is while you’re defining a function in the Editor and you want to repeat the same test expression again and again until it passes. The workflow then becomes:

      • define the function in the editor, eval via Cmd+Enter

      • switch to the REPL, enter a test expression, send the test expression via Cmd+Enter

      • Click on the "Repeat last evaluation …​" button in the REPL

      • switch to the editor, modify the function, eval via Cmd+Enter …​ when the eval succeeds, the last expression entered in the REPl is reevaluated …​ repeat …​

Repl

  • A bug had slipped in the project classpath management preventing native libraries to load properly, for instance when trying to work with Overtone. Fix Issue #577

  • Reverting the behaviour of the "Evaluate selection" when sending to the REPL : back to using 'in-ns instead of 'ns while transitioning to the selection’s namespace Fixes Issue #533: ns is sent to REPL instead of in-ns

  • Launch repl ack timeout set to 60 sec instead of 30

  • Better IPv6 support: replaced "localhost" occurences by "127.0.0.1"

  • "Quiet command report mode" Preference has been removed. Now considered always ON by default. So always quiet.

Stability

  • There were reports of restart issues after Eclipse crashes. Hopefully this has been improved in this release (Fix Issue #568 CCW Beta 0.13.0.201304190010 prevents Eclipse from loading)

Leiningen

  • Internally switched to Leiningen 2.1.2

  • Better exception reporting in the Problem Markers, e.g. when a dependency cannot be found, etc.

Better plays as an Eclipse plugin

  • CCW plugin does not start unnecessarily when invoking the project’s contextual menu