diff --git a/.rubocop.yml b/.rubocop.yml
index f48ad41243f177d1382ee54d03fb013dc5ed00ed..396a760da916e5c7a31e2532d0eeea39d21d8b52 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -950,6 +950,10 @@ Security/JSONLoad:
 Style/AlignParameters:
   Enabled: false
 
+Style/BarePercentLiterals:
+  Enabled: true
+  EnforcedStyle: bare_percent
+
 Style/CaseEquality:
   Enabled: false
 
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index ec9bd29f4ca0c8d7ebc22c4fc9f7bc50e91d052d..12439d7bff6b9d479413f69ba480629ae3026c8e 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -38,13 +38,6 @@ RSpec/SingleArgumentMessageChain:
   Exclude:
     - 'spec/requests/api/internal_spec.rb'
 
-# Offense count: 55
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-# SupportedStyles: percent_q, bare_percent
-Style/BarePercentLiterals:
-  Enabled: false
-
 # Offense count: 399
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, SupportedStyles.
diff --git a/app/helpers/commits_helper.rb b/app/helpers/commits_helper.rb
index 8aad39e148bd2a7d8764b71fff3f14ea6d866f39..4e1fbc57575ffc83a114fe24047ba4bfe75ab9d6 100644
--- a/app/helpers/commits_helper.rb
+++ b/app/helpers/commits_helper.rb
@@ -155,7 +155,7 @@ module CommitsHelper
 
     text =
       if options[:avatar]
-        %Q{<span class="commit-#{options[:source]}-name">#{person_name}</span>}
+        %{<span class="commit-#{options[:source]}-name">#{person_name}</span>}
       else
         person_name
       end
diff --git a/app/models/commit.rb b/app/models/commit.rb
index ec759762977c09116363db3ea35d113261b2bc67..20be3c9cba73c1c143117cea6d1a537bb95ac267 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -255,7 +255,7 @@ class Commit
   end
 
   def revert_message(user)
-    %Q{Revert "#{title.strip}"\n\n#{revert_description(user)}}
+    %{Revert "#{title.strip}"\n\n#{revert_description(user)}}
   end
 
   def reverts_commit?(commit, user)
diff --git a/db/migrate/20160610201627_migrate_users_notification_level.rb b/db/migrate/20160610201627_migrate_users_notification_level.rb
index 760b766828e90420ccf6c38cbe5774bd115af5ac..798e315102ee074fe12e67efdf39dc446b3213d3 100644
--- a/db/migrate/20160610201627_migrate_users_notification_level.rb
+++ b/db/migrate/20160610201627_migrate_users_notification_level.rb
@@ -3,7 +3,7 @@ class MigrateUsersNotificationLevel < ActiveRecord::Migration
   # creating a new record on notification settings table
 
   def up
-    execute(%Q{
+    execute(%{
       INSERT INTO notification_settings
       (user_id, level, created_at, updated_at)
       (SELECT id, notification_level, created_at, updated_at FROM users WHERE notification_level != 1)
@@ -13,7 +13,7 @@ class MigrateUsersNotificationLevel < ActiveRecord::Migration
   # Migrates from notification settings back to user notification_level
   # If no value is found the default level of 1 will be used
   def down
-    execute(%Q{
+    execute(%{
       UPDATE users u SET
       notification_level = COALESCE((SELECT level FROM notification_settings WHERE user_id = u.id AND source_type IS NULL), 1)
     })
diff --git a/db/migrate/20160831214543_migrate_project_features.rb b/db/migrate/20160831214543_migrate_project_features.rb
index 79a5fb29d6405c0611d68d4f3fcd0b3183f96dc9..a2f2267773c9de72cdb3cf45a514af74716dedff 100644
--- a/db/migrate/20160831214543_migrate_project_features.rb
+++ b/db/migrate/20160831214543_migrate_project_features.rb
@@ -10,7 +10,7 @@ class MigrateProjectFeatures < ActiveRecord::Migration
 
   def up
     sql =
-      %Q{
+      %{
         INSERT INTO project_features(project_id, issues_access_level, merge_requests_access_level, wiki_access_level,
         builds_access_level, snippets_access_level, created_at, updated_at)
           SELECT
@@ -29,7 +29,7 @@ class MigrateProjectFeatures < ActiveRecord::Migration
   end
 
   def down
-    sql = %Q{
+    sql = %{
       UPDATE projects
       SET
       issues_enabled = COALESCE((SELECT CASE WHEN issues_access_level = 20 THEN true ELSE false END AS issues_enabled FROM project_features WHERE project_features.project_id = projects.id), true),
diff --git a/features/steps/project/badges/build.rb b/features/steps/project/badges/build.rb
index 96c59322f9b2f59d7a0231a836c2d5bb751f996b..12a49779edbbef8821ac8201e19fa37e18c6d55a 100644
--- a/features/steps/project/badges/build.rb
+++ b/features/steps/project/badges/build.rb
@@ -27,6 +27,6 @@ class Spinach::Features::ProjectBadgesBuild < Spinach::FeatureSteps
   def expect_badge(status)
     svg = Nokogiri::XML.parse(page.body)
     expect(page.response_headers['Content-Type']).to include('image/svg+xml')
-    expect(svg.at(%Q{text:contains("#{status}")})).to be_truthy
+    expect(svg.at(%{text:contains("#{status}")})).to be_truthy
   end
 end
diff --git a/lib/banzai/filter/autolink_filter.rb b/lib/banzai/filter/autolink_filter.rb
index b8d2673c1a67f7739adb81c35368ec1660d0a638..e84b7c2c0c3a9935df26ae57dacfe9433976d09a 100644
--- a/lib/banzai/filter/autolink_filter.rb
+++ b/lib/banzai/filter/autolink_filter.rb
@@ -32,7 +32,7 @@ module Banzai
       IGNORE_PARENTS = %w(a code kbd pre script style).to_set
 
       # The XPath query to use for finding text nodes to parse.
-      TEXT_QUERY = %Q(descendant-or-self::text()[
+      TEXT_QUERY = %(descendant-or-self::text()[
         not(#{IGNORE_PARENTS.map { |p| "ancestor::#{p}" }.join(' or ')})
         and contains(., '://')
         and not(starts-with(., 'http'))
diff --git a/lib/banzai/filter/reference_filter.rb b/lib/banzai/filter/reference_filter.rb
index 6640168bfa26508ff35f450cc29b409a99d88bce..6281fa7e4013facdeae3bc180b5b769a27813a2c 100644
--- a/lib/banzai/filter/reference_filter.rb
+++ b/lib/banzai/filter/reference_filter.rb
@@ -32,7 +32,7 @@ module Banzai
         attributes[:reference_type] ||= self.class.reference_type
         attributes.delete(:original) if context[:no_original_data]
         attributes.map do |key, value|
-          %Q(data-#{key.to_s.dasherize}="#{escape_once(value)}")
+          %(data-#{key.to_s.dasherize}="#{escape_once(value)}")
         end.join(' ')
       end
 
@@ -76,7 +76,7 @@ module Banzai
       def each_node
         return to_enum(__method__) unless block_given?
 
-        query = %Q{descendant-or-self::text()[not(#{ignore_ancestor_query})]
+        query = %{descendant-or-self::text()[not(#{ignore_ancestor_query})]
         | descendant-or-self::a[
           not(contains(concat(" ", @class, " "), " gfm ")) and not(@href = "")
         ]}
diff --git a/lib/banzai/filter/table_of_contents_filter.rb b/lib/banzai/filter/table_of_contents_filter.rb
index 8e7084f2543649e9bf7a6e737f068afbeeb23510..d460110b974bbb6b06f697a84d16ec7ad0c9ed2a 100644
--- a/lib/banzai/filter/table_of_contents_filter.rb
+++ b/lib/banzai/filter/table_of_contents_filter.rb
@@ -43,7 +43,7 @@ module Banzai
           end
         end
 
-        result[:toc] = %Q{<ul class="section-nav">\n#{result[:toc]}</ul>} unless result[:toc].empty?
+        result[:toc] = %{<ul class="section-nav">\n#{result[:toc]}</ul>} unless result[:toc].empty?
 
         doc
       end
@@ -51,11 +51,11 @@ module Banzai
       private
 
       def anchor_tag(id, href)
-        %Q{<a id="#{id}" class="anchor" href="##{href}" aria-hidden="true"></a>}
+        %{<a id="#{id}" class="anchor" href="##{href}" aria-hidden="true"></a>}
       end
 
       def push_toc(href, text)
-        result[:toc] << %Q{<li><a href="##{href}">#{text}</a></li>\n}
+        result[:toc] << %{<li><a href="##{href}">#{text}</a></li>\n}
       end
     end
   end
diff --git a/lib/gitlab/database/median.rb b/lib/gitlab/database/median.rb
index 08607c27c0987470f9131a188faa44257811de6d..e46c551098d7e5336982312a4f8d7293990be84c 100644
--- a/lib/gitlab/database/median.rb
+++ b/lib/gitlab/database/median.rb
@@ -100,13 +100,13 @@ module Gitlab
       end
 
       def extract_epoch(arel_attribute)
-        Arel.sql(%Q{EXTRACT(EPOCH FROM "#{arel_attribute.relation.name}"."#{arel_attribute.name}")})
+        Arel.sql(%{EXTRACT(EPOCH FROM "#{arel_attribute.relation.name}"."#{arel_attribute.name}")})
       end
 
       def extract_diff_epoch(diff)
         return diff unless Gitlab::Database.postgresql?
 
-        Arel.sql(%Q{EXTRACT(EPOCH FROM (#{diff.to_sql}))})
+        Arel.sql(%{EXTRACT(EPOCH FROM (#{diff.to_sql}))})
       end
       # Need to cast '0' to an INTERVAL before we can check if the interval is positive
       def zero_interval
diff --git a/spec/features/projects/badges/coverage_spec.rb b/spec/features/projects/badges/coverage_spec.rb
index 01a95bf49acb465ec9d49243214f46bf7a685409..1fefcb916f63c268966ff1f3e0d3990e5fd14528 100644
--- a/spec/features/projects/badges/coverage_spec.rb
+++ b/spec/features/projects/badges/coverage_spec.rb
@@ -77,6 +77,6 @@ feature 'test coverage badge' do
   def expect_coverage_badge(coverage)
     svg = Nokogiri::XML.parse(page.body)
     expect(page.response_headers['Content-Type']).to include('image/svg+xml')
-    expect(svg.at(%Q{text:contains("#{coverage}")})).to be_truthy
+    expect(svg.at(%{text:contains("#{coverage}")})).to be_truthy
   end
 end
diff --git a/spec/features/projects/issuable_templates_spec.rb b/spec/features/projects/issuable_templates_spec.rb
index e90a033b8c41fdf4579e3a5b653761de90812ee0..3fe5a6ec818107eb9d212ee204ded710504db905 100644
--- a/spec/features/projects/issuable_templates_spec.rb
+++ b/spec/features/projects/issuable_templates_spec.rb
@@ -13,7 +13,7 @@ feature 'issuable templates', feature: true, js: true do
 
   context 'user creates an issue using templates' do
     let(:template_content) { 'this is a test "bug" template' }
-    let(:longtemplate_content) { %Q(this\n\n\n\n\nis\n\n\n\n\na\n\n\n\n\nbug\n\n\n\n\ntemplate) }
+    let(:longtemplate_content) { %(this\n\n\n\n\nis\n\n\n\n\na\n\n\n\n\nbug\n\n\n\n\ntemplate) }
     let(:issue) { create(:issue, author: user, assignee: user, project: project) }
     let(:description_addition) { ' appending to description' }
 
diff --git a/spec/features/projects/pipelines/pipelines_spec.rb b/spec/features/projects/pipelines/pipelines_spec.rb
index 81f5ebf633983fe6e4ff059f5e4042c829ccb660..845490badd42872c35fd1786057313940f0e3fe7 100644
--- a/spec/features/projects/pipelines/pipelines_spec.rb
+++ b/spec/features/projects/pipelines/pipelines_spec.rb
@@ -154,7 +154,7 @@ describe 'Pipelines', :feature, :js do
         it 'contains badge with tooltip which contains error' do
           expect(pipeline).to have_yaml_errors
           expect(page).to have_selector(
-            %Q{span[data-original-title="#{pipeline.yaml_errors}"]})
+            %{span[data-original-title="#{pipeline.yaml_errors}"]})
         end
       end
 
diff --git a/spec/helpers/blob_helper_spec.rb b/spec/helpers/blob_helper_spec.rb
index fa516f9903ecc9a83c1730959d4a49394446b01b..3e1b29dde759f2f69994fd38dd1ac66572c6ce43 100644
--- a/spec/helpers/blob_helper_spec.rb
+++ b/spec/helpers/blob_helper_spec.rb
@@ -23,7 +23,7 @@ describe BlobHelper do
     end
 
     it 'highlights single block' do
-      expected = %Q[<pre class="code highlight"><code><span id="LC1" class="line"><span class="p">(</span><span class="nb">make-pathname</span> <span class="ss">:defaults</span> <span class="nv">name</span></span>
+      expected = %[<pre class="code highlight"><code><span id="LC1" class="line"><span class="p">(</span><span class="nb">make-pathname</span> <span class="ss">:defaults</span> <span class="nv">name</span></span>
 <span id="LC2" class="line"><span class="ss">:type</span> <span class="s">"assem"</span><span class="p">))</span></span></code></pre>]
 
       expect(helper.highlight(blob_name, blob_content)).to eq(expected)
diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb
index b8ec3521edb9892e9f0a56baa0c4a0ff9ac3402f..520b6afddc39847d0a539afd84bcd5cfcbb43798 100644
--- a/spec/helpers/gitlab_markdown_helper_spec.rb
+++ b/spec/helpers/gitlab_markdown_helper_spec.rb
@@ -107,13 +107,13 @@ describe GitlabMarkdownHelper do
     it 'ignores reference links when they are the entire body' do
       text = issues[0].to_reference
       act = helper.link_to_gfm(text, '/foo')
-      expect(act).to eq %Q(<a href="/foo">#{issues[0].to_reference}</a>)
+      expect(act).to eq %(<a href="/foo">#{issues[0].to_reference}</a>)
     end
 
     it 'replaces commit message with emoji to link' do
       actual = link_to_gfm(':book:Book', '/foo')
       expect(actual).
-        to eq %Q(<img class="emoji" title=":book:" alt=":book:" src="http://#{Gitlab.config.gitlab.host}/assets/1F4D6.png" height="20" width="20" align="absmiddle"><a href="/foo">Book</a>)
+        to eq %(<img class="emoji" title=":book:" alt=":book:" src="http://#{Gitlab.config.gitlab.host}/assets/1F4D6.png" height="20" width="20" align="absmiddle"><a href="/foo">Book</a>)
     end
   end
 
diff --git a/spec/lib/banzai/filter/external_link_filter_spec.rb b/spec/lib/banzai/filter/external_link_filter_spec.rb
index d9e4525cb2857795c361fa34bcbfa0d8b5ba6360..5ffbab0f12f4ef62eb7862d6096da1aae1f95f83 100644
--- a/spec/lib/banzai/filter/external_link_filter_spec.rb
+++ b/spec/lib/banzai/filter/external_link_filter_spec.rb
@@ -15,7 +15,7 @@ describe Banzai::Filter::ExternalLinkFilter, lib: true do
 
   it 'skips internal links' do
     internal = Gitlab.config.gitlab.url
-    exp = act = %Q(<a href="#{internal}/sign_in">Login</a>)
+    exp = act = %(<a href="#{internal}/sign_in">Login</a>)
     expect(filter(act).to_html).to eq exp
   end
 
@@ -70,8 +70,8 @@ describe Banzai::Filter::ExternalLinkFilter, lib: true do
     it 'skips internal links' do
       internal_link = Gitlab.config.gitlab.url + "/sign_in"
       url = internal_link.gsub(/\Ahttp/, 'HtTp')
-      act = %Q(<a href="#{url}">Login</a>)
-      exp = %Q(<a href="#{internal_link}">Login</a>)
+      act = %(<a href="#{url}">Login</a>)
+      exp = %(<a href="#{internal_link}">Login</a>)
       expect(filter(act).to_html).to eq(exp)
     end
 
diff --git a/spec/lib/banzai/filter/label_reference_filter_spec.rb b/spec/lib/banzai/filter/label_reference_filter_spec.rb
index 5e16fd10ebedb1588be012592180d0669a3424ac..e72d9935bd4e81a5b78a7141bffb8b946d3e29cf 100644
--- a/spec/lib/banzai/filter/label_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/label_reference_filter_spec.rb
@@ -282,7 +282,7 @@ describe Banzai::Filter::LabelReferenceFilter, lib: true do
   end
 
   describe 'referencing a label in a link href' do
-    let(:reference) { %Q{<a href="#{label.to_reference}">Label</a>} }
+    let(:reference) { %{<a href="#{label.to_reference}">Label</a>} }
 
     it 'links to a valid reference' do
       doc = reference_filter("See #{reference}")
diff --git a/spec/lib/banzai/filter/milestone_reference_filter_spec.rb b/spec/lib/banzai/filter/milestone_reference_filter_spec.rb
index a317c751d3275ebc5034e61bc38c9c2b2161e3f8..cd94729b44294e74569e4172e47fa48a9d09c88e 100644
--- a/spec/lib/banzai/filter/milestone_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/milestone_reference_filter_spec.rb
@@ -117,7 +117,7 @@ describe Banzai::Filter::MilestoneReferenceFilter, lib: true do
   end
 
   describe 'referencing a milestone in a link href' do
-    let(:reference) { %Q{<a href="#{milestone.to_reference}">Milestone</a>} }
+    let(:reference) { %{<a href="#{milestone.to_reference}">Milestone</a>} }
 
     it 'links to a valid reference' do
       doc = reference_filter("See #{reference}")
diff --git a/spec/lib/banzai/filter/user_reference_filter_spec.rb b/spec/lib/banzai/filter/user_reference_filter_spec.rb
index e9b7b566806f621a0f8018a2226b4001d2bb1a0e..6afeee4d76d1a389c4d8f1553fa3f21c2e5f0f92 100644
--- a/spec/lib/banzai/filter/user_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/user_reference_filter_spec.rb
@@ -144,7 +144,7 @@ describe Banzai::Filter::UserReferenceFilter, lib: true do
   end
 
   context 'referencing a user in a link href' do
-    let(:reference) { %Q{<a href="#{user.to_reference}">User</a>} }
+    let(:reference) { %{<a href="#{user.to_reference}">User</a>} }
 
     it 'links to a User' do
       doc = reference_filter("Hey #{reference}")
diff --git a/spec/lib/banzai/pipeline/full_pipeline_spec.rb b/spec/lib/banzai/pipeline/full_pipeline_spec.rb
index 2501b638774789070bb9eee3805c678b4e43ee19..c24a0e4d2b6036eb40cb115bb4523ee4eca4583f 100644
--- a/spec/lib/banzai/pipeline/full_pipeline_spec.rb
+++ b/spec/lib/banzai/pipeline/full_pipeline_spec.rb
@@ -20,7 +20,7 @@ describe Banzai::Pipeline::FullPipeline do
     end
 
     it 'escapes the data-original attribute on a reference' do
-      markdown = %Q{[">bad things](#{issue.to_reference})}
+      markdown = %{[">bad things](#{issue.to_reference})}
       result = described_class.to_html(markdown, project: project)
       expect(result).to include(%{data-original='\"&gt;bad things'})
     end
diff --git a/spec/lib/gitlab/diff/highlight_spec.rb b/spec/lib/gitlab/diff/highlight_spec.rb
index 5893485634d326e7e66e206bd88011ac29c471c4..1cb6f66ced53a8315408a6030f2abc6f0a0fe8fb 100644
--- a/spec/lib/gitlab/diff/highlight_spec.rb
+++ b/spec/lib/gitlab/diff/highlight_spec.rb
@@ -22,19 +22,19 @@ describe Gitlab::Diff::Highlight, lib: true do
       end
 
       it 'highlights and marks unchanged lines' do
-        code = %Q{ <span id="LC7" class="line">  <span class="k">def</span> <span class="nf">popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="kp">nil</span><span class="p">)</span></span>\n}
+        code = %{ <span id="LC7" class="line">  <span class="k">def</span> <span class="nf">popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="kp">nil</span><span class="p">)</span></span>\n}
 
         expect(subject[2].text).to eq(code)
       end
 
       it 'highlights and marks removed lines' do
-        code = %Q{-<span id="LC9" class="line">      <span class="k">raise</span> <span class="s2">"System commands must be given as an array of strings"</span></span>\n}
+        code = %{-<span id="LC9" class="line">      <span class="k">raise</span> <span class="s2">"System commands must be given as an array of strings"</span></span>\n}
 
         expect(subject[4].text).to eq(code)
       end
 
       it 'highlights and marks added lines' do
-        code = %Q{+<span id="LC9" class="line">      <span class="k">raise</span> <span class="no"><span class='idiff left'>RuntimeError</span></span><span class="p"><span class='idiff'>,</span></span><span class='idiff right'> </span><span class="s2">"System commands must be given as an array of strings"</span></span>\n}
+        code = %{+<span id="LC9" class="line">      <span class="k">raise</span> <span class="no"><span class='idiff left'>RuntimeError</span></span><span class="p"><span class='idiff'>,</span></span><span class='idiff right'> </span><span class="s2">"System commands must be given as an array of strings"</span></span>\n}
 
         expect(subject[5].text).to eq(code)
       end
@@ -53,21 +53,21 @@ describe Gitlab::Diff::Highlight, lib: true do
       end
 
       it 'marks unchanged lines' do
-        code = %Q{   def popen(cmd, path=nil)}
+        code = %{   def popen(cmd, path=nil)}
 
         expect(subject[2].text).to eq(code)
         expect(subject[2].text).not_to be_html_safe
       end
 
       it 'marks removed lines' do
-        code = %Q{-      raise "System commands must be given as an array of strings"}
+        code = %{-      raise "System commands must be given as an array of strings"}
 
         expect(subject[4].text).to eq(code)
         expect(subject[4].text).not_to be_html_safe
       end
 
       it 'marks added lines' do
-        code = %Q{+      raise <span class='idiff left right'>RuntimeError, </span>&quot;System commands must be given as an array of strings&quot;}
+        code = %{+      raise <span class='idiff left right'>RuntimeError, </span>&quot;System commands must be given as an array of strings&quot;}
 
         expect(subject[5].text).to eq(code)
         expect(subject[5].text).to be_html_safe
diff --git a/spec/lib/gitlab/gfm/reference_rewriter_spec.rb b/spec/lib/gitlab/gfm/reference_rewriter_spec.rb
index 5d416c9eec3204c1394a903f1af64d5bca768c69..8625dd7b711639397c293e8be8f3bd9deb442065 100644
--- a/spec/lib/gitlab/gfm/reference_rewriter_spec.rb
+++ b/spec/lib/gitlab/gfm/reference_rewriter_spec.rb
@@ -68,12 +68,12 @@ describe Gitlab::Gfm::ReferenceRewriter do
 
           context 'label referenced by id' do
             let(:text) { '#1 and ~123' }
-            it { is_expected.to eq %Q{#{project_ref}#1 and #{project_ref}~123} }
+            it { is_expected.to eq %{#{project_ref}#1 and #{project_ref}~123} }
           end
 
           context 'label referenced by text' do
             let(:text) { '#1 and ~"test"' }
-            it { is_expected.to eq %Q{#{project_ref}#1 and #{project_ref}~123} }
+            it { is_expected.to eq %{#{project_ref}#1 and #{project_ref}~123} }
           end
         end
 
@@ -88,12 +88,12 @@ describe Gitlab::Gfm::ReferenceRewriter do
 
           context 'label referenced by id' do
             let(:text) { '#1 and ~321' }
-            it { is_expected.to eq %Q{#{project_ref}#1 and #{project_ref}~321} }
+            it { is_expected.to eq %{#{project_ref}#1 and #{project_ref}~321} }
           end
 
           context 'label referenced by text' do
             let(:text) { '#1 and ~"group label"' }
-            it { is_expected.to eq %Q{#{project_ref}#1 and #{project_ref}~321} }
+            it { is_expected.to eq %{#{project_ref}#1 and #{project_ref}~321} }
           end
         end
       end
diff --git a/spec/lib/gitlab/highlight_spec.rb b/spec/lib/gitlab/highlight_spec.rb
index e177d8831587cf7150863c8db97c986b691f6911..fc2733691be869b5a6e89f0351321f263162cbe8 100644
--- a/spec/lib/gitlab/highlight_spec.rb
+++ b/spec/lib/gitlab/highlight_spec.rb
@@ -13,9 +13,9 @@ describe Gitlab::Highlight, lib: true do
     end
 
     it 'highlights all the lines properly' do
-      expect(lines[4]).to eq(%Q{<span id="LC5" class="line">  <span class="kp">extend</span> <span class="nb">self</span></span>\n})
-      expect(lines[21]).to eq(%Q{<span id="LC22" class="line">    <span class="k">unless</span> <span class="no">File</span><span class="p">.</span><span class="nf">directory?</span><span class="p">(</span><span class="n">path</span><span class="p">)</span></span>\n})
-      expect(lines[26]).to eq(%Q{<span id="LC27" class="line">    <span class="vi">@cmd_status</span> <span class="o">=</span> <span class="mi">0</span></span>\n})
+      expect(lines[4]).to eq(%{<span id="LC5" class="line">  <span class="kp">extend</span> <span class="nb">self</span></span>\n})
+      expect(lines[21]).to eq(%{<span id="LC22" class="line">    <span class="k">unless</span> <span class="no">File</span><span class="p">.</span><span class="nf">directory?</span><span class="p">(</span><span class="n">path</span><span class="p">)</span></span>\n})
+      expect(lines[26]).to eq(%{<span id="LC27" class="line">    <span class="vi">@cmd_status</span> <span class="o">=</span> <span class="mi">0</span></span>\n})
     end
 
     describe 'with CRLF' do
diff --git a/spec/lib/gitlab/reference_extractor_spec.rb b/spec/lib/gitlab/reference_extractor_spec.rb
index 84cfd934fa0d1e9753ace33604b9893c047163e4..0a2cab6888d741708ee62abf58127e1648faec59 100644
--- a/spec/lib/gitlab/reference_extractor_spec.rb
+++ b/spec/lib/gitlab/reference_extractor_spec.rb
@@ -29,7 +29,7 @@ describe Gitlab::ReferenceExtractor, lib: true do
     project.team << [@u_foo, :reporter]
     project.team << [@u_bar, :guest]
 
-    subject.analyze(%Q{
+    subject.analyze(%{
       Inline code: `@foo`
 
       Code block:
diff --git a/spec/lib/gitlab/url_sanitizer_spec.rb b/spec/lib/gitlab/url_sanitizer_spec.rb
index 2cb74629da861c380ef76a30625a6c7b0fd4fd74..f3533947c1ca320021f9c16c1be574d7518bdb57 100644
--- a/spec/lib/gitlab/url_sanitizer_spec.rb
+++ b/spec/lib/gitlab/url_sanitizer_spec.rb
@@ -9,7 +9,7 @@ describe Gitlab::UrlSanitizer, lib: true do
   describe '.sanitize' do
     def sanitize_url(url)
       # We want to try with multi-line content because is how error messages are formatted
-      described_class.sanitize(%Q{
+      described_class.sanitize(%{
          remote: Not Found
          fatal: repository '#{url}' not found
       })
diff --git a/spec/models/project_label_spec.rb b/spec/models/project_label_spec.rb
index 3e9dd3758edf554bc28c0969ecd2300b73bcb075..5bfa9fffba9cd35acf240d4eca45a26bfea2c35c 100644
--- a/spec/models/project_label_spec.rb
+++ b/spec/models/project_label_spec.rb
@@ -105,14 +105,14 @@ describe ProjectLabel, models: true do
       context 'using name' do
         it 'returns cross reference with label name' do
           expect(label.to_reference(project, format: :name)).
-            to eq %Q(#{label.project.path_with_namespace}~"#{label.name}")
+            to eq %(#{label.project.path_with_namespace}~"#{label.name}")
         end
       end
 
       context 'using id' do
         it 'returns cross reference with label id' do
           expect(label.to_reference(project, format: :id)).
-            to eq %Q(#{label.project.path_with_namespace}~#{label.id})
+            to eq %(#{label.project.path_with_namespace}~#{label.id})
         end
       end
     end
diff --git a/spec/models/project_services/bamboo_service_spec.rb b/spec/models/project_services/bamboo_service_spec.rb
index 497a626a418c8e2bc9ba635bca6cecc705360844..e30b62ddb61e49ec708af0483d768bd14a6f83bb 100644
--- a/spec/models/project_services/bamboo_service_spec.rb
+++ b/spec/models/project_services/bamboo_service_spec.rb
@@ -181,7 +181,7 @@ describe BambooService, models: true, caching: true do
       end
 
       it 'sets commit status to "pending" when response has no results' do
-        stub_request(body: %Q({"results":{"results":{"size":"0"}}}))
+        stub_request(body: %({"results":{"results":{"size":"0"}}}))
 
         is_expected.to eq('pending')
       end
@@ -223,6 +223,6 @@ describe BambooService, models: true, caching: true do
   end
 
   def bamboo_response(result_key: 42, build_state: 'success', size: 1)
-    %Q({"results":{"results":{"size":"#{size}","result":{"buildState":"#{build_state}","planResultKey":{"key":"#{result_key}"}}}}})
+    %({"results":{"results":{"size":"#{size}","result":{"buildState":"#{build_state}","planResultKey":{"key":"#{result_key}"}}}}})
   end
 end
diff --git a/spec/models/project_services/buildkite_service_spec.rb b/spec/models/project_services/buildkite_service_spec.rb
index dbd23ff54918dd654f47a3601b594cb627193fff..59c04c32cf0809514042fea8d79d8d6ff173b945 100644
--- a/spec/models/project_services/buildkite_service_spec.rb
+++ b/spec/models/project_services/buildkite_service_spec.rb
@@ -92,7 +92,7 @@ describe BuildkiteService, models: true, caching: true do
         end
 
         it 'passes through build status untouched when status is 200' do
-          stub_request(body: %Q({"status":"Great Success"}))
+          stub_request(body: %({"status":"Great Success"}))
 
           is_expected.to eq('Great Success')
         end
@@ -101,7 +101,7 @@ describe BuildkiteService, models: true, caching: true do
   end
 
   def stub_request(status: 200, body: nil)
-    body ||= %Q({"status":"success"})
+    body ||= %({"status":"success"})
     buildkite_full_url = 'https://gitlab.buildkite.com/status/secret-sauce-status-token.json?commit=123'
 
     WebMock.stub_request(:get, buildkite_full_url).to_return(
diff --git a/spec/models/project_services/drone_ci_service_spec.rb b/spec/models/project_services/drone_ci_service_spec.rb
index f9307d6de7b11181e9a7a2dbbb6edb57c633f47a..3b5b215513d1eeb111bd005e26b6737a6a365445 100644
--- a/spec/models/project_services/drone_ci_service_spec.rb
+++ b/spec/models/project_services/drone_ci_service_spec.rb
@@ -50,7 +50,7 @@ describe DroneCiService, models: true, caching: true do
     end
 
     def stub_request(status: 200, body: nil)
-      body ||= %Q({"status":"success"})
+      body ||= %({"status":"success"})
 
       WebMock.stub_request(:get, commit_status_path).to_return(
         status: status,
@@ -102,7 +102,7 @@ describe DroneCiService, models: true, caching: true do
       }.each do |drone_status, our_status|
 
         it "sets commit status to #{our_status.inspect} when returned status is #{drone_status.inspect}" do
-          stub_request(body: %Q({"status":"#{drone_status}"}))
+          stub_request(body: %({"status":"#{drone_status}"}))
 
           is_expected.to eq(our_status)
         end
diff --git a/spec/models/project_services/teamcity_service_spec.rb b/spec/models/project_services/teamcity_service_spec.rb
index a1edd083aa1c456bffdeae8855840eef648c02e4..2b76897e4eb14ef4a841c3804a20be94e3af90cf 100644
--- a/spec/models/project_services/teamcity_service_spec.rb
+++ b/spec/models/project_services/teamcity_service_spec.rb
@@ -143,7 +143,7 @@ describe TeamcityService, models: true, caching: true do
       end
 
       it 'returns a build URL when teamcity_url has no trailing slash' do
-        stub_request(body: %Q({"build":{"id":"666"}}))
+        stub_request(body: %({"build":{"id":"666"}}))
 
         is_expected.to eq('http://gitlab.com/teamcity/viewLog.html?buildId=666&buildTypeId=foo')
       end
@@ -152,7 +152,7 @@ describe TeamcityService, models: true, caching: true do
         let(:teamcity_url) { 'http://gitlab.com/teamcity/' }
 
         it 'returns a build URL' do
-          stub_request(body: %Q({"build":{"id":"666"}}))
+          stub_request(body: %({"build":{"id":"666"}}))
 
           is_expected.to eq('http://gitlab.com/teamcity/viewLog.html?buildId=666&buildTypeId=foo')
         end
@@ -202,7 +202,7 @@ describe TeamcityService, models: true, caching: true do
 
   def stub_request(status: 200, body: nil, build_status: 'success')
     teamcity_full_url = 'http://mic:password@gitlab.com/teamcity/httpAuth/app/rest/builds/branch:unspecified:any,number:123'
-    body ||= %Q({"build":{"status":"#{build_status}","id":"666"}})
+    body ||= %({"build":{"status":"#{build_status}","id":"666"}})
 
     WebMock.stub_request(:get, teamcity_full_url).to_return(
       status: status,
diff --git a/spec/workers/repository_import_worker_spec.rb b/spec/workers/repository_import_worker_spec.rb
index f1b1574abf487fa21cdadf19dc04553e332f8c58..9b0e663584413a9feec3d73abae85873450ad146 100644
--- a/spec/workers/repository_import_worker_spec.rb
+++ b/spec/workers/repository_import_worker_spec.rb
@@ -20,7 +20,7 @@ describe RepositoryImportWorker do
 
     context 'when the import has failed' do
       it 'hide the credentials that were used in the import URL' do
-        error = %Q{remote: Not Found fatal: repository 'https://user:pass@test.com/root/repoC.git/' not found }
+        error = %{remote: Not Found fatal: repository 'https://user:pass@test.com/root/repoC.git/' not found }
         expect_any_instance_of(Projects::ImportService).to receive(:execute).
           and_return({ status: :error, message: error })