Encontrei um bug em que não consigo pesquisar postagens de um usuário por @+nome de usuário na caixa de pesquisa se o nome de usuário contiver unicode (por exemplo, chinês \\p{Han}).
O motivo é que a regex usada no seguinte código (em lib\\search.rb) corresponde apenas a caracteres ASCII.
advanced_filter(/^\\@([a-zA-Z0-9_\\-.]+)$/i) do |posts, match|
Testei se adiciono allowed_unicode_username_characters na regex (ou seja, adicionando uma regra advanced_filter(/^\\@([a-zA-Z0-9_\\-.\\p{Han}]+)$/i)), funciona bem.
Eu uso um plugin para adicionar o advanced_filter com o seguinte código, e ele atende às minhas necessidades.
if SiteSetting.unicode_usernames?
regexp = Regexp.new("(?i-mx:^(?:@([a-zA-Z0-9_\\-.#{SiteSetting.allowed_unicode_username_characters}]+))$)")
Search.advanced_filter(regexp) do |posts, match|
username = match.downcase
user_id = User.where(staged: false).where(username_lower: username).pluck_first(:id)
if !user_id && username == "me"
user_id = @guardian.user&.id
end
if user_id
posts.where("posts.user_id = #{user_id}")
else
posts.where("1 = 0")
end
end
end
Mas não sei como modificar o core corretamente, especialmente quando allowed_unicode_username_characters é uma variável. Talvez uma solução simples, mas provavelmente errada, seja mudar advanced_filter(/^\\@([a-zA-Z0-9_\\-.]+)$/i) para advanced_filter(/^\\@(.+)$/i), como você fez em advanced_filter(/^user:(.+)$/i).