From 22fb810725e898bbdbfb2bb761ea501a11cef2b4 Mon Sep 17 00:00:00 2001 From: Piotr Date: Tue, 26 Aug 2025 02:27:06 +0200 Subject: [PATCH] fix string.find plain argument --- src/lib/string.ts | 12 ++++++++++-- tests/starlight/lib-string.lua | 7 +++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/lib/string.ts b/src/lib/string.ts index d504ac1..587649a 100644 --- a/src/lib/string.ts +++ b/src/lib/string.ts @@ -1,7 +1,15 @@ import { sprintf } from 'printj' import { Table } from '../Table' import { LuaError } from '../LuaError' -import { tostring, posrelat, coerceArgToNumber, coerceArgToString, hasOwnProperty, LuaType } from '../utils' +import { + tostring, + posrelat, + coerceArgToNumber, + coerceArgToString, + hasOwnProperty, + LuaType, + coerceToBoolean +} from '../utils' const ROSETTA_STONE: Record = { '([^a-zA-Z0-9%(])-': '$1*?', @@ -117,7 +125,7 @@ function find(s: LuaType, pattern: LuaType, init: LuaType, plain: LuaType): (num const S = coerceArgToString(s, 'find', 1) const P = coerceArgToString(pattern, 'find', 2) const INIT = init === undefined ? 1 : coerceArgToNumber(init, 'find', 3) - const PLAIN = plain === undefined ? false : coerceArgToNumber(plain, 'find', 4) + const PLAIN = plain === undefined ? false : coerceToBoolean(plain) // Regex if (!PLAIN) { diff --git a/tests/starlight/lib-string.lua b/tests/starlight/lib-string.lua index 59f9749..a89e55f 100644 --- a/tests/starlight/lib-string.lua +++ b/tests/starlight/lib-string.lua @@ -101,6 +101,13 @@ b = string.find(a, 'The .* fox') assertTrue (b == 1, 'The dot pattern should match across lines in string.find()') +local ok, plainFind = pcall(function () return string.find('abc', 'a.c', 1, true) end) +assertTrue (ok and plainFind == nil, 'string.find() should accept a boolean plain argument and disable pattern matching') + +local literalFind = string.find('a.c', 'a.c', 1, true) +assertTrue (literalFind == 1, 'string.find() should find literal matches when plain is true') + + -- format