From 6e5a9f948221b52caaaf106079cb3430c4dd7c77 Mon Sep 17 00:00:00 2001 From: Federico Mengozzi <19249682+fedemengo@users.noreply.github.com> Date: Mon, 17 Apr 2023 22:31:38 +0100 Subject: patch 9.0.1464: strace filetype detection is expensive Problem: Strace filetype detection is expensive. Solution: Match with a cheap pattern first. (Federico Mengozzi, closes #12220) --- runtime/autoload/dist/script.vim | 4 +++- src/testdir/test_filetype.vim | 6 ++++++ src/version.c | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/runtime/autoload/dist/script.vim b/runtime/autoload/dist/script.vim index f86c42898..e95c633fc 100644 --- a/runtime/autoload/dist/script.vim +++ b/runtime/autoload/dist/script.vim @@ -338,7 +338,9 @@ def DetectFromText(line1: string) set ft=virata # Strace - elseif line1 =~ '[0-9:.]* *execve(' || line1 =~ '^__libc_start_main' + # inaccurate fast match first, then use accurate slow match + elseif (line1 =~ 'execve(' && line1 =~ '^[0-9:.]* *execve(') + || line1 =~ '^__libc_start_main' set ft=strace # VSE JCL diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index 0b8b52c88..60e4f3088 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -733,6 +733,11 @@ func Test_filetype_detection() filetype off endfunc +" Content lines that should not result in filetype detection +let s:false_positive_checks = { + \ '': [['test execve("/usr/bin/pstree", ["pstree"], 0x7ff0 /* 63 vars */) = 0']], + \ } + " Filetypes detected from the file contents by scripts.vim let s:script_checks = { \ 'virata': [['% Virata'], @@ -824,6 +829,7 @@ func Run_script_detection(test_dict) endfunc func Test_script_detection() + call Run_script_detection(s:false_positive_checks) call Run_script_detection(s:script_checks) call Run_script_detection(s:script_env_checks) endfunc diff --git a/src/version.c b/src/version.c index 6c8d76e38..c050afec4 100644 --- a/src/version.c +++ b/src/version.c @@ -695,6 +695,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1464, /**/ 1463, /**/ -- cgit v1.2.1