2024年3月31日日曜日

clojureでgoog.string.formatをimportするとvscodeのclj-kondで出る警告Unresolved symbolはgoog.stringをrequireすれば消せる


背景

clojure scriptの標準ライブラリとして提供されているgoog.string.formatをrequireして利用すると、vscode上のclj-kond(clojure向けの表記整理プログラム)で下記の警告が出ました。
(ns front.model.example
(:require goog.string.format))

(defn build-str [str-a str-b]
(goog.string.format "a: %s, b: %s" str-a str-b))
Unresolved symbol: goog.string.formatclj-kondo(unresolved-symbol)

警告は出るものの動作はするのですが目障りだったので警告が出ない記述を探りました。
その結果、公式のGoogle Clojure Libraryの説明に書かれている内容で解決しましたが、備忘録として試した内容を記事に残します。

利用環境

OS: Ubuntu22.04
VSCode: 1.86.2
clj-kondo: v2024.3.13
clojure script: 1.11.132
shadow cljs: 2.27.5

goog.stringをasでrequireして/format

公式のGoogle Clojure Libraryの説明でも説明されているようにgoog.stringをrequireして/formatを呼べば、警告が消えました。
(ns front.model.example
(:require [goog.string :as gstr]))

(defn build-str [str-a str-b]
(gstr/format "a: %s, b: &b" str-a str-b))

formatをrefer

ファイルに含まれる関数のようにreferで読み込む記述でも警告が消えました。
(ns front.model.example
(:require [goog.string :refer [format]]))

(defn build-str [str-a str-b]
(format "a: %s, b: %s" str-a str-b))

goog.stringをas無しでrequireしてgoog.string.formatを呼ぶ

as無しでgoog.stringをrequireするとclj-kondoがgoog.string.formatを認識してくれるのか警告が消えます。(goog.string/formatでも呼べます。)
(ns front.model.example
(:require goog.string))

(defn build-str [str-a str-b]
(goog.string.format "a: %s, b: &b" str-a str-b))

おわり

goog.string.formatに表示されるclj-kondoの警告はgoog.stringをrequireしたら消せると分かりました。
goog.string.formatはrequireしなくても呼べる関数なので、気をつけてrequireしなくても警告無しで使わせて欲しいです。

参考

公式のGoogle Clojure Libraryの説明
How to refer a Google Closure function in ClojureScript?

0 件のコメント :