From 5c56e9adff6c1ab8c7ae72429e6bc33b426541f0 Mon Sep 17 00:00:00 2001
From: Martijn Cuppens <martijn.cuppens@gmail.com>
Date: Tue, 22 Jan 2019 20:55:23 +0100
Subject: [PATCH] Add `deprecate()` mixin (#28092)

---
 scss/_mixins.scss                        |  3 +++
 scss/_variables.scss                     |  1 +
 scss/mixins/_deprecate.scss              | 10 ++++++++++
 scss/mixins/_text-hide.scss              |  4 +---
 site/docs/4.2/getting-started/theming.md |  1 +
 5 files changed, 16 insertions(+), 3 deletions(-)
 create mode 100644 scss/mixins/_deprecate.scss

diff --git a/scss/_mixins.scss b/scss/_mixins.scss
index 8710166660..254986cdea 100644
--- a/scss/_mixins.scss
+++ b/scss/_mixins.scss
@@ -2,6 +2,9 @@
 //
 // Used in conjunction with global variables to enable certain theme features.
 
+// Deprecate
+@import "mixins/deprecate";
+
 // Utilities
 @import "mixins/breakpoints";
 @import "mixins/hover";
diff --git a/scss/_variables.scss b/scss/_variables.scss
index c916257e78..bbd92a91aa 100644
--- a/scss/_variables.scss
+++ b/scss/_variables.scss
@@ -117,6 +117,7 @@ $enable-grid-classes:                         true !default;
 $enable-pointer-cursor-for-buttons:           true !default;
 $enable-print-styles:                         true !default;
 $enable-validation-icons:                     true !default;
+$enable-deprecation-messages:                 true !default;
 
 
 // Spacing
diff --git a/scss/mixins/_deprecate.scss b/scss/mixins/_deprecate.scss
new file mode 100644
index 0000000000..43d6f1ea04
--- /dev/null
+++ b/scss/mixins/_deprecate.scss
@@ -0,0 +1,10 @@
+// Deprecate mixin
+//
+// This mixin can be used to deprecate mixins or functions.
+// `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to
+// some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap)
+@mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning) {
+  @if ($enable-deprecation-messages != false and $ignore-warning != true) {
+    @warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}.";
+  }
+}
diff --git a/scss/mixins/_text-hide.scss b/scss/mixins/_text-hide.scss
index 9ffab169f3..3a923011ec 100644
--- a/scss/mixins/_text-hide.scss
+++ b/scss/mixins/_text-hide.scss
@@ -7,7 +7,5 @@
   background-color: transparent;
   border: 0;
 
-  @if ($ignore-warning != true) {
-    @warn "The `text-hide()` mixin has been deprecated as of v4.1.0. It will be removed entirely in v5.";
-  }
+  @include deprecate("`text-hide()`", "v4.1.0", "v5", $ignore-warning);
 }
diff --git a/site/docs/4.2/getting-started/theming.md b/site/docs/4.2/getting-started/theming.md
index db3b12ffd4..a40b6395ac 100644
--- a/site/docs/4.2/getting-started/theming.md
+++ b/site/docs/4.2/getting-started/theming.md
@@ -243,6 +243,7 @@ You can find and customize these variables for key global options in Bootstrap's
 | `$enable-pointer-cursor-for-buttons`         | `true` (default) or `false`        | Add "hand" cursor to non-disabled button elements. |
 | `$enable-print-styles`                       | `true` (default) or `false`        | Enables styles for optimizing printing. |
 | `$enable-validation-icons`                   | `true` (default) or `false`        | Enables `background-image` icons within textual inputs and some custom forms for validation states. |
+| `$enable-deprecation-messages`               | `true` or `false` (default)        | Set to `true` to show warnings when using any of the deprecated mixins and functions that are planned to be removed in `v5`. |
 
 ## Color
 
-- 
GitLab