eslint: Fix unicorn/prefer-string-replace-all.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg 2023-05-11 12:49:10 -07:00 committed by Tim Abbott
parent fe54df0b01
commit 54f90e41c0
16 changed files with 42 additions and 37 deletions

View File

@ -106,7 +106,7 @@ async function checkFile(file) {
diff += prefix;
diff += part.value
.replace(/\n$/, "")
.replace(/\n/g, "\n" + prefix);
.replaceAll("\n", "\n" + prefix);
diff += "\n";
}
diff += "\u001B[0m";

View File

@ -68,7 +68,7 @@ export function wrap_code(code: string, lang?: string): string {
}
// Trim trailing \n until there's just one left
// This mirrors how pygments handles code input
return header + _.escape(code.replace(/^\n+|\n+$/g, "")) + "\n</code></pre></div>";
return header + _.escape(code.replaceAll(/^\n+|\n+$/g, "")) + "\n</code></pre></div>";
}
function wrap_quote(text: string): string {

View File

@ -9,7 +9,9 @@ const hashReplacements = new Map([
// window.location.hash. So we hide our URI-encoding
// by replacing % with . (like MediaWiki).
export function encodeHashComponent(str) {
return encodeURIComponent(str).replace(/[%().]/g, (matched) => hashReplacements.get(matched));
return encodeURIComponent(str).replaceAll(/[%().]/g, (matched) =>
hashReplacements.get(matched),
);
}
export function decodeHashComponent(str) {
@ -18,7 +20,7 @@ export function decodeHashComponent(str) {
// of such characters when encoding. This can also,
// fail independent of our fault.
// Here we let the calling code handle the exception.
return decodeURIComponent(str.replace(/\./g, "%"));
return decodeURIComponent(str.replaceAll(".", "%"));
}
export function stream_id_to_slug(stream_id, maybe_get_stream_name) {
@ -29,7 +31,7 @@ export function stream_id_to_slug(stream_id, maybe_get_stream_name) {
// TODO: Convert this to replaceAll once mobile no longer supports
// browsers that don't have it.
name = name.replace(/ /g, "-");
name = name.replaceAll(" ", "-");
return stream_id + "-" + name;
}

View File

@ -45,7 +45,7 @@ type UnicodeEmoji = {
};
export function remove_diacritics(s: string): string {
return s.normalize("NFKD").replace(unicode_marks, "");
return s.normalize("NFKD").replaceAll(unicode_marks, "");
}
// This function attempts to match a query with a source text.
@ -79,7 +79,7 @@ function clean_query(query: string): string {
// contenteditable widget such as the composebox PM section, the
// space at the end was a `no break-space (U+00A0)` instead of
// `space (U+0020)`, which lead to no matches in those cases.
query = query.replace(/\u00A0/g, " ");
query = query.replaceAll("\u00A0", " ");
return query;
}
@ -98,7 +98,7 @@ export const parse_unicode_emoji_code = (code: string): string =>
export function get_emoji_matcher(query: string): (emoji: Emoji) => boolean {
// replace spaces with underscores for emoji matching
query = query.replace(/ /g, "_");
query = query.replaceAll(" ", "_");
query = clean_query_lowercase(query);
return function (emoji) {
@ -166,7 +166,7 @@ export function triage<T>(
export function sort_emojis<T extends Emoji>(objs: T[], query: string): T[] {
// replace spaces with underscores for emoji matching
query = query.replace(/ /g, "_");
query = query.replaceAll(" ", "_");
query = query.toLowerCase();
function decent_match(name: string): boolean {

View File

@ -41,7 +41,7 @@ export function process_message(message) {
}
for (const word of my_alert_words) {
const clean = _.escapeRegExp(word).replace(/["&'<>]/g, (c) =>
const clean = _.escapeRegExp(word).replaceAll(/["&'<>]/g, (c) =>
alert_regex_replacements.get(c),
);
const before_punctuation = "\\s|^|>|[\\(\\\".,';\\[]";

View File

@ -224,7 +224,9 @@ export function start(msg_type, opts) {
compose_state.topic(opts.topic);
// Set the recipients with a space after each comma, so it looks nice.
compose_state.private_message_recipient(opts.private_message_recipient.replace(/,\s*/g, ", "));
compose_state.private_message_recipient(
opts.private_message_recipient.replaceAll(/,\s*/g, ", "),
);
// If the user opens the compose box, types some text, and then clicks on a
// different stream/topic, we want to keep the text in the compose box

View File

@ -43,7 +43,7 @@ function construct_recipient_header($message_row) {
const message_header_content = rows
.get_message_recipient_header($message_row)
.text()
.replace(/\s+/g, " ")
.replaceAll(/\s+/g, " ")
.replace(/^\s/, "")
.replace(/\s$/, "");
return $("<p>").append($("<strong>").text(message_header_content));
@ -322,10 +322,10 @@ export function paste_handler_converter(paste_html) {
let markdown_text = turndownService.turndown(paste_html);
// Checks for escaped ordered list syntax.
markdown_text = markdown_text.replace(/^(\W* {0,3})(\d+)\\\. /gm, "$1$2. ");
markdown_text = markdown_text.replaceAll(/^(\W* {0,3})(\d+)\\\. /gm, "$1$2. ");
// Removes newlines before the start of a list and between list elements.
markdown_text = markdown_text.replace(/\n+([*+-])/g, "\n$1");
markdown_text = markdown_text.replaceAll(/\n+([*+-])/g, "\n$1");
return markdown_text;
}

View File

@ -356,7 +356,7 @@ function update_emoji_showcase($focused_emoji) {
const emoji_dict = {
...focused_emoji_dict,
name: focused_emoji_name.replace(/_/g, " "),
name: focused_emoji_name.replaceAll("_", " "),
};
const rendered_showcase = render_emoji_showcase({
emoji_dict,

View File

@ -271,7 +271,7 @@ export class Filter {
operand = operand
.toString()
.toLowerCase()
.replace(/[\u201C\u201D]/g, '"');
.replaceAll(/[\u201C\u201D]/g, '"');
break;
default:
operand = operand.toString().toLowerCase();
@ -294,20 +294,20 @@ export class Filter {
URI encoding to avoid problematic characters. */
static encodeOperand(operand) {
return operand
.replace(/%/g, "%25")
.replace(/\+/g, "%2B")
.replace(/ /g, "+")
.replace(/"/g, "%22");
.replaceAll("%", "%25")
.replaceAll("+", "%2B")
.replaceAll(" ", "+")
.replaceAll('"', "%22");
}
static decodeOperand(encoded, operator) {
encoded = encoded.replace(/"/g, "");
encoded = encoded.replaceAll('"', "");
if (
["dm-including", "dm", "sender", "from", "pm-with", "group-pm-with"].includes(
operator,
) === false
) {
encoded = encoded.replace(/\+/g, " ");
encoded = encoded.replaceAll("+", " ");
}
return util.robust_url_decode(encoded).trim();
}

View File

@ -232,13 +232,13 @@ function parse_with_options({raw_content, helper_config, options}) {
},
silencedMentionHandler(quote) {
// Silence quoted mentions.
quote = quote.replace(
quote = quote.replaceAll(
/(<span class="user-mention)(" data-user-id="(\d+|\*)">)@/g,
"$1 silent$2",
);
// Silence quoted user group mentions.
quote = quote.replace(
quote = quote.replaceAll(
/(<span class="user-group-mention)(" data-user-group-id="\d+">)@/g,
"$1 silent$2",
);
@ -375,7 +375,7 @@ function handleUnicodeEmoji({unicode_emoji, get_emoji_name}) {
if (emoji_name) {
const alt_text = ":" + emoji_name + ":";
const title = emoji_name.replace(/_/g, " ");
const title = emoji_name.replaceAll("_", " ");
return make_emoji_span(codepoint, title, alt_text);
}
@ -384,7 +384,7 @@ function handleUnicodeEmoji({unicode_emoji, get_emoji_name}) {
function handleEmoji({emoji_name, get_realm_emoji_url, get_emoji_codepoint}) {
const alt_text = ":" + emoji_name + ":";
const title = emoji_name.replace(/_/g, " ");
const title = emoji_name.replaceAll("_", " ");
// Zulip supports both standard/Unicode emoji, served by a
// spritesheet and custom realm-specific emoji (served by URL).

View File

@ -328,7 +328,8 @@ export function process_notification(notification) {
if (content.length + title.length + other_recipients.length > 230) {
// Then count how many people are in the conversation and summarize
// by saying the conversation is with "you and [number] other people"
other_recipients = other_recipients.replace(/[^,]/g, "").length + " other people";
other_recipients =
other_recipients.replaceAll(/[^,]/g, "").length + " other people";
}
title += " (to you and " + other_recipients + ")";

View File

@ -530,7 +530,7 @@ export function pm_with_url(message) {
} else {
const person = get_by_user_id(user_ids[0]);
if (person && person.full_name) {
suffix = person.full_name.replace(/[ "%/<>`\p{C}]+/gu, "-");
suffix = person.full_name.replaceAll(/[ "%/<>`\p{C}]+/gu, "-");
} else {
blueslip.error("Unknown people in message");
suffix = "unk";
@ -605,7 +605,7 @@ export function emails_to_slug(emails_string) {
if (emails.length === 1) {
const name = get_by_email(emails[0]).full_name;
slug += name.replace(/[ "%/<>`\p{C}]+/gu, "-");
slug += name.replaceAll(/[ "%/<>`\p{C}]+/gu, "-");
} else {
slug += "group";
}

View File

@ -76,7 +76,7 @@ export function set_up($input, pills, opts) {
},
matcher(item) {
let query = this.query.toLowerCase();
query = query.replace(/\u00A0/g, " ");
query = query.replaceAll("\u00A0", " ");
if (include_streams(query)) {
query = query.trim().slice(1);

View File

@ -79,7 +79,7 @@ function sort_author_full_name(a, b) {
function is_default_emoji(emoji_name) {
// Spaces are replaced with `_` to match how the emoji name will
// actually be stored in the backend.
return emoji_codes.names.includes(emoji_name.replace(/ /g, "_"));
return emoji_codes.names.includes(emoji_name.replaceAll(" ", "_"));
}
function is_custom_emoji(emoji_name) {
@ -116,7 +116,7 @@ export function populate_emoji() {
return render_admin_emoji_list({
emoji: {
name: item.name,
display_name: item.name.replace(/_/g, " "),
display_name: item.name.replaceAll("_", " "),
source_url: item.source_url,
author: item.author || "",
can_delete_emoji: can_delete_emoji(item),

View File

@ -190,7 +190,7 @@ export function extract_property_name($elem, for_realm_default_settings) {
// "realm_{settings_name}}" because both user and realm default
// settings use the same template and each element should have
// unique id.
return /^realm_(.*)$/.exec($elem.attr("id").replace(/-/g, "_"))[1];
return /^realm_(.*)$/.exec($elem.attr("id").replaceAll("-", "_"))[1];
}
if ($elem.attr("id").startsWith("id_authmethod")) {
@ -203,7 +203,7 @@ export function extract_property_name($elem, for_realm_default_settings) {
return /^id_authmethod[\da-z]+_(.*)$/.exec($elem.attr("id"))[1];
}
return /^id_(.*)$/.exec($elem.attr("id").replace(/-/g, "_"))[1];
return /^id_(.*)$/.exec($elem.attr("id").replaceAll("-", "_"))[1];
}
export function get_subsection_property_elements(subsection) {
@ -545,7 +545,7 @@ export function populate_auth_methods(auth_methods) {
// As a result, the only two "incoming" assumptions on the auth method name are:
// 1) It contains at least one allowed symbol
// 2) No two auth method names are identical after this allowlist filtering
prefix: "id_authmethod" + auth_method.toLowerCase().replace(/[^\da-z]/g, "") + "_",
prefix: "id_authmethod" + auth_method.toLowerCase().replaceAll(/[^\da-z]/g, "") + "_",
});
}
$auth_methods_list.html(rendered_auth_method_rows);
@ -1230,7 +1230,7 @@ export function register_save_discard_widget_handlers(
// fields that must be submitted together, which is
// managed by the get_complete_data_for_subsection function.
const [, subsection_id] = /^org-(.*)$/.exec($subsection_elem.attr("id"));
const subsection = subsection_id.replace(/-/g, "_");
const subsection = subsection_id.replaceAll("-", "_");
extra_data = get_complete_data_for_subsection(subsection);
}

View File

@ -133,7 +133,7 @@ export function render_stream(stream) {
export function render_emoji(item) {
const args = {
is_emoji: true,
primary: item.emoji_name.replace(/_/g, " "),
primary: item.emoji_name.replaceAll("_", " "),
};
if (item.emoji_url) {