diff --git a/src/metabase/models/setting.clj b/src/metabase/models/setting.clj
index 43942d9461e4519d93062dbc9d4661459efa4b15..e636424c84cb3bb1bf5e4addac9e85482d17f8e8 100644
--- a/src/metabase/models/setting.clj
+++ b/src/metabase/models/setting.clj
@@ -649,10 +649,12 @@
 (defn metadata-for-setting-fn
   "Create metadata for the function automatically generated by [[defsetting]]."
   [{:keys [default description tag deprecated], setting-type :type, :as setting}]
-  {:arglists '([] [new-value])
+  {:arglists (list
+              (with-meta [] {:tag tag})
+              (with-meta '[new-value] {:tag tag}))
+
    ;; indentation below is intentional to make it clearer what shape the generated documentation is going to take.
    ;; Turn on auto-complete-mode in Emacs and see for yourself!
-   :tag tag
    :deprecated deprecated
    :doc (str/join
          "\n"
diff --git a/test/metabase/models/setting_test.clj b/test/metabase/models/setting_test.clj
index 380b7357c21a240fff03be1bd40007a371bfd93b..d32b00c2f78a021acac3e949259d901c22f760b0 100644
--- a/test/metabase/models/setting_test.clj
+++ b/test/metabase/models/setting_test.clj
@@ -75,10 +75,19 @@
   [setting-name]
   (boolean (Setting :key (name setting-name))))
 
+(defn- test-assert-setting-has-tag [setting-var expected-tag]
+  (let [{:keys [tag arglists]} (meta setting-var)]
+    (testing "There should not be a tag on the var itself"
+      (is (nil? tag)))
+    (testing "Arglists should be tagged\n"
+      (doseq [arglist arglists]
+        (testing (binding [*print-meta* true] (pr-str arglist))
+          (is (= expected-tag
+                 (:tag (meta arglist)))))))))
+
 (deftest string-tag-test
-  (testing "String vars defined by `defsetting` should have correct `:tag` metadata"
-    (is (= 'java.lang.String
-           (:tag (meta #'test-setting-1))))))
+  (testing "String vars defined by `defsetting` should have correct `:tag` metadata\n"
+    (test-assert-setting-has-tag #'test-setting-1 'java.lang.String)))
 
 (deftest defsetting-getter-fn-test
   (testing "Test defsetting getter fn. Should return the value from env var MB_TEST_ENV_SETTING"
@@ -297,8 +306,7 @@
 
 (deftest boolean-settings-tag-test
   (testing "Boolean settings should have correct `:tag` metadata"
-    (is (= 'java.lang.Boolean
-           (:tag (meta #'test-boolean-setting))))))
+    (test-assert-setting-has-tag #'test-boolean-setting 'java.lang.Boolean)))
 
 (deftest boolean-setting-user-facing-info-test
   (is (= {:value nil, :is_env_setting false, :env_name "MB_TEST_BOOLEAN_SETTING", :default nil}
@@ -459,8 +467,7 @@
   :type :timestamp)
 
 (deftest timestamp-settings-test
-  (is (= 'java.time.temporal.Temporal
-         (:tag (meta #'test-timestamp-setting))))
+  (test-assert-setting-has-tag #'test-timestamp-setting 'java.time.temporal.Temporal)
 
   (testing "make sure we can set & fetch the value and that it gets serialized/deserialized correctly"
     (test-timestamp-setting #t "2018-07-11T09:32:00.000Z")