Skip to content

Commit

Permalink
Merge pull request weavejester#138 from sloxy/win-line-end
Browse files Browse the repository at this point in the history
Change linebreak handling to work with Windows
  • Loading branch information
weavejester authored Nov 1, 2018
2 parents c3e35c3 + 50278ba commit fee6fdb
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 2 deletions.
18 changes: 18 additions & 0 deletions cljfmt/src/cljfmt/core.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#?@(:clj
[(:refer-clojure :exclude [reader-conditional?])
(:require [clojure.java.io :as io]
[clojure.string :as str]
[clojure.zip :as zip]
[rewrite-clj.node :as n]
[rewrite-clj.parser :as p]
Expand Down Expand Up @@ -390,3 +391,20 @@
(reformat-form (cond-> options
alias-map (assoc :alias-map alias-map)))
(n/string)))))

(def default-line-separator
#?(:clj (System/lineSeparator) :cljs \newline))

(defn normalize-newlines [s]
(str/replace s #"\r\n" "\n"))

(defn replace-newlines [s sep]
(str/replace s #"\n" sep))

(defn find-line-separator [s]
(or (re-find #"\r?\n" s) default-line-separator))

(defn wrap-normalize-newlines [f]
(fn [s]
(let [sep (find-line-separator s)]
(-> s normalize-newlines f (replace-newlines sep)))))
2 changes: 1 addition & 1 deletion cljfmt/src/cljfmt/main.clj
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
[f])))

(defn- reformat-string [options s]
(cljfmt/reformat-string s options))
((cljfmt/wrap-normalize-newlines #(cljfmt/reformat-string % options)) s))

(defn- project-path [{:keys [project-root]} file]
(-> project-root (or ".") io/file (relative-path (io/file file))))
Expand Down
33 changes: 32 additions & 1 deletion cljfmt/test/cljfmt/core_test.cljc
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
(ns cljfmt.core-test
(:require [#?@(:clj (clojure.test :refer)
:cljs (cljs.test :refer-macros)) [deftest testing is]]
[cljfmt.core :refer [reformat-string]]
[cljfmt.core :refer [reformat-string default-line-separator
normalize-newlines find-line-separator
replace-newlines wrap-normalize-newlines]]
[clojure.string :as str]))

(deftest test-indent
Expand Down Expand Up @@ -283,3 +285,32 @@
(is (= (reformat-string "(juxt +' -')") "(juxt +' -')"))
(is (= (reformat-string "#\"(?i)foo\"") "#\"(?i)foo\""))
(is (= (reformat-string "#\"a\nb\"") "#\"a\nb\"")))

(deftest test-normalize-newlines
(is (= (normalize-newlines "foo\nbar\nbaz") "foo\nbar\nbaz"))
(is (= (normalize-newlines "foo\r\nbar\r\nbaz") "foo\nbar\nbaz"))
(is (= (normalize-newlines "foo\r\nbar\nbaz\r\n") "foo\nbar\nbaz\n"))
(is (= (normalize-newlines "foo\\nbar\nbaz\r\n") "foo\\nbar\nbaz\n"))
(is (= (normalize-newlines "foo\\nbar\r\nbaz\r\n") "foo\\nbar\nbaz\n"))
(is (= (normalize-newlines "foo\\nbar\\r\nbaz") "foo\\nbar\\r\nbaz"))
(is (= (normalize-newlines "foobarbaz") "foobarbaz")))

(deftest test-find-line-separator
(is (= (find-line-separator "foo\nbar\nbaz") "\n"))
(is (= (find-line-separator "foo\r\nbar\r\nbaz") "\r\n"))
(is (= (find-line-separator "foo\r\nbar\nbaz\r\n") "\r\n"))
(is (= (find-line-separator "foo\\nbar\nbaz\r\n") "\n"))
(is (= (find-line-separator "foo\\nbar\r\nbaz\r\n") "\r\n"))
(is (= (find-line-separator "foo\\nbar\\r\nbaz") "\n"))
(is (= (find-line-separator "foobarbaz") default-line-separator)))

(deftest test-replace-newlines
(is (= (replace-newlines "foo\nbar\nbaz" "\n") "foo\nbar\nbaz"))
(is (= (replace-newlines "foo\nbar\nbaz" "\r\n") "foo\r\nbar\r\nbaz"))
(is (= (replace-newlines "foobarbaz" "\n") "foobarbaz"))
(is (= (replace-newlines "foobarbaz" "\r\n") "foobarbaz")))

(deftest test-wrap-normalize-newlines
(is (= ((wrap-normalize-newlines identity) "foo\nbar\nbaz") "foo\nbar\nbaz"))
(is (= ((wrap-normalize-newlines identity) "foo\r\nbar\r\nbaz") "foo\r\nbar\r\nbaz"))
(is (= ((wrap-normalize-newlines identity) "foobarbaz") "foobarbaz")))

0 comments on commit fee6fdb

Please sign in to comment.