From 7ea9910e22a90b8d6be9fc50b2217e7787fc49a7 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Wed, 8 Jun 2022 05:41:10 +0200 Subject: [PATCH 1/7] Add Babashka Clojure dialect sample --- samples/Clojure/tell-number.bb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 samples/Clojure/tell-number.bb diff --git a/samples/Clojure/tell-number.bb b/samples/Clojure/tell-number.bb new file mode 100644 index 0000000000..80263e84c0 --- /dev/null +++ b/samples/Clojure/tell-number.bb @@ -0,0 +1,21 @@ +#!/usr/bin/env bb + +(ns tell-number + (:require [clojure.tools.cli :refer [parse-opts]] + [clojure.edn :refer [read-string]] + [clojure.pprint :refer [cl-format]])) + +(def cli-options + [["-n" "--number NUMBER" "Number to tell" + :parse-fn read-string + :validate [number? "Must be a number"]]]) + +(def to-english + (partial cl-format nil "~@(~@[~R~]~^ ~A.~)")) + +(defn main- [] + (let [cli-options (:options (parse-opts *command-line-args* cli-options)) + {:keys [number]} cli-options] + (println (to-english number)))) + +(main-) From b4dbac53eee696af81ef9a944ed4c64cf8d4b753 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Wed, 8 Jun 2022 06:45:22 +0200 Subject: [PATCH 2/7] Add Babashka Clojure dialect *.bb file extension to languages.yaml --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index ddc26a37a6..f806247521 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1008,6 +1008,7 @@ Clojure: - ".cljscm" - ".cljx" - ".hic" + - ".bb" filenames: - riemann.config language_id: 62 From e4ff62e736c76b69319f9fc952f07b3e7ea69890 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Wed, 8 Jun 2022 06:50:46 +0200 Subject: [PATCH 3/7] Add heuristic for Babashka Clojure dialect --- lib/linguist/heuristics.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/linguist/heuristics.yml b/lib/linguist/heuristics.yml index cda6f32cee..f92edd4408 100644 --- a/lib/linguist/heuristics.yml +++ b/lib/linguist/heuristics.yml @@ -94,6 +94,8 @@ disambiguations: pattern: '(<^\s*; |End Function)' - language: BitBake pattern: '^\s*(# |include|require)\b' + - language: Clojure + pattern: '\((def|defn|defmacro\let)\s' - extensions: ['.bi'] rules: - language: FreeBasic From 7068f47edd94f2e9a231dd2b871ed295f9535e67 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Wed, 8 Jun 2022 11:29:13 +0200 Subject: [PATCH 4/7] Add new sample file --- samples/Clojure/tell-number.bb | 21 ------------ samples/Clojure/validate-and-format.bb | 45 ++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 21 deletions(-) delete mode 100644 samples/Clojure/tell-number.bb create mode 100644 samples/Clojure/validate-and-format.bb diff --git a/samples/Clojure/tell-number.bb b/samples/Clojure/tell-number.bb deleted file mode 100644 index 80263e84c0..0000000000 --- a/samples/Clojure/tell-number.bb +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bb - -(ns tell-number - (:require [clojure.tools.cli :refer [parse-opts]] - [clojure.edn :refer [read-string]] - [clojure.pprint :refer [cl-format]])) - -(def cli-options - [["-n" "--number NUMBER" "Number to tell" - :parse-fn read-string - :validate [number? "Must be a number"]]]) - -(def to-english - (partial cl-format nil "~@(~@[~R~]~^ ~A.~)")) - -(defn main- [] - (let [cli-options (:options (parse-opts *command-line-args* cli-options)) - {:keys [number]} cli-options] - (println (to-english number)))) - -(main-) diff --git a/samples/Clojure/validate-and-format.bb b/samples/Clojure/validate-and-format.bb new file mode 100644 index 0000000000..05a5d746e0 --- /dev/null +++ b/samples/Clojure/validate-and-format.bb @@ -0,0 +1,45 @@ +#!/usr/bin/env bb + +(def filter-regex "\\.(clj\\|cljs\\|cljc)$") + +(defn clojure-source? [path] + (re-find #"\.(clj|cljs|cljc)$" path)) + +(defn modified-files [] + (-> (shell/sh "git" "diff" "--cached" "--name-only" "--diff-filter=ACMR") + :out + (str/split #"\n"))) + +(defn lint-valid? [paths] + (apply shell/sh "clj-kondo" "--lint" paths)) + +(defn native-cljstyle? [] + (-> (shell/sh "which" "cljstyle") :exit zero?)) + +(defn format-files [paths] + (if (native-cljstyle?) + (do + (println "Using native cljstyle...") + (apply shell/sh "cljstyle" "fix" paths)) + (do + (println "Using cljstyle from clojure deps...") + (apply shell/sh "clojure" "-A:format" "fix" paths)))) + +(defn update-file-index + "Add unstaged modifications to git, so they get to be part of the current commit." + [path] + (let [hash (:out (shell/sh "git" "hash-object" "-w" path))] + (shell/sh "git" "update-index" "--add" "--cacheinfo" "100644" hash path))) + +(let [paths (->> (modified-files) + (filter clojure-source?))] + (when (seq paths) + (format-files paths) + + (doseq [path paths] + (update-file-index path)) + + (let [{:keys [exit out]} (lint-valid? paths)] + (when-not (= 0 exit) + (println "Lint failed.\n" out) + (System/exit 1))))) From fae12ecfced9e013c715bd0e1ef0f42d8f9243ca Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Wed, 8 Jun 2022 12:34:26 +0200 Subject: [PATCH 5/7] Fix regexp --- lib/linguist/heuristics.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/heuristics.yml b/lib/linguist/heuristics.yml index f92edd4408..a8374a20ec 100644 --- a/lib/linguist/heuristics.yml +++ b/lib/linguist/heuristics.yml @@ -95,7 +95,7 @@ disambiguations: - language: BitBake pattern: '^\s*(# |include|require)\b' - language: Clojure - pattern: '\((def|defn|defmacro\let)\s' + pattern: '\((def|defn|defmacro|let)\s' - extensions: ['.bi'] rules: - language: FreeBasic From df1c6bc13fedb2e9877b94966f26e425574c7b62 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Wed, 8 Jun 2022 13:12:02 +0200 Subject: [PATCH 6/7] Put extenstion in the list alphabeticaly --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index f806247521..867385e3d5 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1000,6 +1000,7 @@ Clojure: color: "#db5855" extensions: - ".clj" + - ".bb" - ".boot" - ".cl2" - ".cljc" @@ -1008,7 +1009,6 @@ Clojure: - ".cljscm" - ".cljx" - ".hic" - - ".bb" filenames: - riemann.config language_id: 62 From f689cb740e12e28dc3aa942e72f592ae91e66e56 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Wed, 8 Jun 2022 13:14:23 +0200 Subject: [PATCH 7/7] Add *.bb as `interpreters` property --- lib/linguist/languages.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 867385e3d5..10d7031e3a 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1011,6 +1011,8 @@ Clojure: - ".hic" filenames: - riemann.config + interpreters: + - bb language_id: 62 Closure Templates: type: markup