From 438257749f1ba8464b34de3150cf80a2663c99e4 Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Wed, 24 Feb 2021 23:44:29 -0500 Subject: [PATCH] Complete rewrite of C++ syntax additions. Now it's region based and uses keywords mode. Hopefully this is faster. It also enables support for multiple libraries with partially overlapping symbol sets. (E.g.: Boost and STL.) --- vim/after/syntax/cpp.vim | 129 +++++++++++++++++++++++---------------- vim/vimrc.fileprefs | 3 + 2 files changed, 79 insertions(+), 53 deletions(-) diff --git a/vim/after/syntax/cpp.vim b/vim/after/syntax/cpp.vim index 038537b..e32b73b 100644 --- a/vim/after/syntax/cpp.vim +++ b/vim/after/syntax/cpp.vim @@ -23,67 +23,84 @@ syn match cxxErrorNames "\<[A-Z][A-Za-z0-9_]*Error\>" syn match cxxCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*\(<\)\@=" -syn match cxxStlPrefix "\" -syn match cxxStlTypes "\(\" -syn match cxxStlTypes "\(\" -syn match cxxStlConstant "\(std::\)\@<=\(endl\|flush\)\>" +syn keyword cxxStlKeywords containedin=cxxStlLibrary,cxxBoostLibrary string_view mutex thread contained +syn keyword cxxStlKeywords containedin=cxxStlLibrary string contained -syn match cxxStlKeywords "\(\" -syn match cxxStlKeywords "\(\" -" syn match cxxStlTypes "\(std::\)\@<=\(vector\|array\|deque\|list\|pair\|\(priority_\)\?queue\|stack\|\(unordered_\)\?\(multi\)\?\(set\|map\)\)\(<\|;\| \)\@=" -syn match cxxStlKeywords "\(std::\)\@<=\(unique_ptr\)\(<\|;\| \|\>\)\@=" -syn match cxxStlKeywords "\(std::\)\@<=\(shared_ptr\)\(<\|;\| \|\>\)\@=" -syn match cxxStlKeywords "\(std::\)\@<=\(weak_ptr\)\(<\|;\| \|\>\)\@=" -syn match cxxStlKeywords "\(std::\)\@<=nullptr_t\>" -syn match cxxStlKeywords "\(std::\)\@<=function\>" +syn keyword cxxStlKeywords containedin=cxxStlLibrary,cxxBoostLibrary shared_ptr weak_ptr contained +syn keyword cxxStlKeywords containedin=cxxStlLibrary unique_ptr nullptr_t contained +syn keyword cxxStlKeywords containedin=cxxStlLibrary,cxxBoostLibrary function contained -syn match cxxStlFunctions "\(std::\)\@<=make_\(unique\|shared\)\(<\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=make_\(pair\|tuple\)\((\|<\)\@=" +syn keyword cxxStlTypes containedin=cxxStlLibrary iostream istream ostream fstream ifstream ofstream contained +syn keyword cxxStlTypes containedin=cxxStlLibrary stringstream istringstream ostringstream contained +syn keyword cxxStlTypes containedin=cxxStlLibrary iostream basic_string vector deque list pair queue priority_queue stack map multimap set multiset contained -syn match cxxStlFunctions "\(std::\)\@<=addressof\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=tie\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=copy\(_\(n\|backward\|if\)\)\?\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=find\(_\(if\|first_of\|end\)\?\)\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=count\(_if\)\?\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=\(transform\|mismatch\|equal\|accumulate\|move\)\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=search\(_n\)\?\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=fill\(_n\)\?\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=generate\(_n\)\?\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=replace\(_copy\)\?\(_if\)\?\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=\(unique\|reverse\|rotate\)\(_copy\)\?\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=\(stable_\)\?\(partition\|sort\)\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=partial_sort\(_copy\)\?\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=\(inplace_\)\?merge\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=\(inplace_\)\?merge\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=set_\(union\|intersection\|\(symmetric_\)\?difference\)\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=\(push\|pop\|make\|is\|sort\)_heap\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=\(min\|max\)\(_element\)\?\((\)\@=" -syn match cxxStlFunctions "\(std::\)\@<=\(front_\|back_\)\?\(inserter\)\((\)\@=" +syn keyword cxxStlTypes containedin=cxxStlLibrary,cxxBoostLibrary array contained +syn keyword cxxStlTypes containedin=cxxStlLibrary,cxxBoostLibrary unordered_map unordered_multimap contained +syn keyword cxxStlTypes containedin=cxxStlLibrary,cxxBoostLibrary unordered_set unordered_multiset contained -syn match cxxStlTraits "\(std::\)\@<=\(is_convertible\)\(<\)\@=" -syn match cxxStlTraits "\(std::\)\@<=\(is_\(default_\)\?constructible\)\(<\)\@=" -syn match cxxStlFunctions "\<\(back_inserter\|begin\|end\)\((\)\@=" +syn keyword cxxStlService containedin=cxxStlLibrary cout clog cerr contained +syn keyword cxxStlConstant containedin=cxxStlLibrary endl flush contained -syn match cxxStlExceptionNames "\(std::\)\@<=exception\>" -syn match cxxStlExceptionNames "\(std::\)\@<=runtime_error\>" -syn match cxxStlExceptionNames "\(std::\)\@<=logic_error\>" -syn match cxxStlExceptionNames "\(std::\)\@<=bad_typeid\>" -syn match cxxStlExceptionNames "\(std::\)\@<=bad_cast\>" -syn match cxxStlExceptionNames "\(std::\)\@<=bad_alloc\>" -syn match cxxStlExceptionNames "\(std::\)\@<=bad_array_new_length\>" -syn match cxxStlExceptionNames "\(std::\)\@<=bad_exception\>" -syn match cxxStlExceptionNames "\(std::\)\@<=invalid_argument\>" -syn match cxxStlExceptionNames "\(std::\)\@<=domain_error\>" -syn match cxxStlExceptionNames "\(std::\)\@<=out_of_range\>" -syn match cxxStlExceptionNames "\(std::\)\@<=range_error\>" -syn match cxxStlExceptionNames "\(std::\)\@<=\(overflow\|underflow\)_error\>" +syn keyword cxxStlFunctions containedin=cxxStlLibrary,cxxBoostLibrary make_shared make_tuple contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary make_unique make_pair tie addressof contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary copy copy_n copy_if copy_backward replace_copy_if replace_copy contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary find find_if find_first_of find_end contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary count count_if search search_n contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary transform mismatch equal accumulate move contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary generate generate_n fill fill_n contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary unique reverse rotate contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary unique_copy reverse_copy rotate_copy contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary sort stable_sort partition stable_partition contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary partial_sort partial_sort_copy contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary merge inplace_merge contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary set_union set_intersection contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary set_difference set_symmetric_difference contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary make_heap is_heap sort_heap push_heap pop_heap contained +syn keyword cxxStlFunctions containedin=cxxStlLibrary min max min_element max_element contained + +syn keyword cxxStlFunctions containedin=cxxStlLibrary getline contained + + +syn keyword cxxStlTraits containedin=cxxStlLibrary is_convertible contained +syn keyword cxxStlTraits containedin=cxxStlLibrary is_constructible is_default_constructible contained + +syn keyword cxxStlFreeFunctions back_inserter front_inserter inserter begin end + + +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary exception contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary runtime_error contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary logic_error contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary bad_typeid contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary bad_cast contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary bad_alloc contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary bad_array_new_length contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary bad_exception contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary invalid_argument contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary domain_error contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary out_of_range contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary range_error contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary overflow_error contained +syn keyword cxxStlExceptionNames containedin=cxxStlLibrary underflow_error contained syn match cxxStlDangerousFunction "\(\.\)\@<=release()" @@ -99,6 +116,9 @@ if version >= 508 || !exists("did_cxx_syntax_inits") command -nargs=+ HiLink hi def link endif + "HiLink cxxStlLibrary cxxLibPrefix + "HiLink cxxBoostLibrary cxxLibPrefix + HiLink cxxObjects Object HiLink cxxCast cxxStatement @@ -116,7 +136,10 @@ if version >= 508 || !exists("did_cxx_syntax_inits") HiLink cxxStlTypes Object HiLink cxxStlKeywords cppType HiLink cxxStlFunctions cppStatement - HiLink cxxStlPrefix Caller + HiLink cxxStlFreeFunctions cppStatement + + HiLink cxxLibPrefix Caller + HiLink cxxStlTraits MetaFunction HiLink cxxMetaFunction MetaFunction diff --git a/vim/vimrc.fileprefs b/vim/vimrc.fileprefs index 19072d4..76968fd 100644 --- a/vim/vimrc.fileprefs +++ b/vim/vimrc.fileprefs @@ -16,6 +16,9 @@ au BufNewFile,BufRead *.cpp,*.hpp,*.cc,*.h set tw=150 au BufNewFile,BufRead */cshenv/tcshrc.* set filetype=tcsh +au BufNewFile,BufRead */src/bp/*.cpp,*/src/bp/*.hpp syn region cxxBoostLibrary matchgroup=cxxLibPrefix start="\<\(bp_boost\)\z(::\)\@=" matchgroup=NONE skip="\z1" end="\>" transparent +au BufNewFile,BufRead */src/bp/*.cpp,*/src/bp/*.hpp syn region cxxBoostVerbotenLibrary matchgroup=cxxStlDangerousFunction start="\<\(boost\)\z(::\)\@=" matchgroup=NONE skip="\z1" end="\>" transparent + " falcish "au BufNewFile,BufRead *.cpp,*.hpp,*.cc,*.h set ts=3 "au BufNewFile,BufRead *.cpp,*.hpp,*.cc,*.h set sts=3