changeset 35655:bf08e2efcba1

runtime(mojo): include mojo ftplugin and indent script Commit: https://github.com/vim/vim/commit/fc533c9f06aff579437f9f2348a21241a72c7967 Author: Riley Bruins <ribru17@hotmail.com> Date: Thu Jul 11 22:50:36 2024 +0200 runtime(mojo): include mojo ftplugin and indent script Taken from excerpts of the Python ftplugin and adapted, indent script simply sources the python indent script. closes: #15171 Signed-off-by: Riley Bruins <ribru17@hotmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Thu, 11 Jul 2024 23:00:07 +0200
parents 0d300597a888
children c2f74389a856
files .github/MAINTAINERS runtime/ftplugin/mojo.vim runtime/indent/mojo.vim
diffstat 3 files changed, 49 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/.github/MAINTAINERS
+++ b/.github/MAINTAINERS
@@ -202,6 +202,7 @@ runtime/ftplugin/markdown.vim		@tpope
 runtime/ftplugin/meson.vim		@Liambeguin
 runtime/ftplugin/modula2.vim		@dkearns
 runtime/ftplugin/modula3.vim		@dkearns
+runtime/ftplugin/mojo.vim		@ribru17
 runtime/ftplugin/nginx.vim		@chr4
 runtime/ftplugin/nim.vim		@ribru17
 runtime/ftplugin/nroff.vim		@a-vrma
@@ -323,6 +324,7 @@ runtime/indent/lua.vim			@marcuscf
 runtime/indent/make.vim			@dkearns
 runtime/indent/meson.vim		@Liambeguin
 runtime/indent/mma.vim			@dkearns
+runtime/indent/mojo.vim			@ribru17
 runtime/indent/nginx.vim		@chr4
 runtime/indent/nsis.vim			@k-takata
 runtime/indent/occam.vim		@dkearns
new file mode 100644
--- /dev/null
+++ b/runtime/ftplugin/mojo.vim
@@ -0,0 +1,41 @@
+" Vim filetype plugin
+" Language:	Mojo
+" Maintainer:	Riley Bruins <ribru17@gmail.com>
+" Last Change:	2024 Jul 07
+
+if exists('b:did_ftplugin')
+  finish
+endif
+let b:did_ftplugin = 1
+
+setlocal include=^\\s*\\(from\\\|import\\)
+setlocal define=^\\s*\\(\\(async\\s\\+\\)\\?def\\\|class\\)
+
+" For imports with leading .., append / and replace additional .s with ../
+let b:grandparent_match = '^\(.\.\)\(\.*\)'
+let b:grandparent_sub = '\=submatch(1)."/".repeat("../",strlen(submatch(2)))'
+
+" For imports with a single leading ., replace it with ./
+let b:parent_match = '^\.\(\.\)\@!'
+let b:parent_sub = './'
+
+" Replace any . sandwiched between word characters with /
+let b:child_match = '\(\w\)\.\(\w\)'
+let b:child_sub = '\1/\2'
+
+setlocal includeexpr=substitute(substitute(substitute(
+      \v:fname,
+      \b:grandparent_match,b:grandparent_sub,''),
+      \b:parent_match,b:parent_sub,''),
+      \b:child_match,b:child_sub,'g')
+
+setlocal suffixesadd=.mojo
+setlocal comments=b:#,fb:-
+setlocal commentstring=#\ %s
+
+let b:undo_ftplugin = 'setlocal include<'
+      \ . '|setlocal define<'
+      \ . '|setlocal includeexpr<'
+      \ . '|setlocal suffixesadd<'
+      \ . '|setlocal comments<'
+      \ . '|setlocal commentstring<'
new file mode 100644
--- /dev/null
+++ b/runtime/indent/mojo.vim
@@ -0,0 +1,6 @@
+" Vim indent file
+" Language:	Mojo
+" Maintainer:	Riley Bruins <ribru17@gmail.com>
+" Last Change:	2024 Jul 07
+
+runtime! indent/python.vim