Riley Bruins | fc533c9 | 2024-07-11 22:50:36 +0200 | [diff] [blame] | 1 | " Vim filetype plugin |
| 2 | " Language: Mojo |
| 3 | " Maintainer: Riley Bruins <ribru17@gmail.com> |
| 4 | " Last Change: 2024 Jul 07 |
Eisuke Kawashima | fbbaa6e | 2025-04-16 18:20:59 +0200 | [diff] [blame] | 5 | " 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121) |
Riley Bruins | fc533c9 | 2024-07-11 22:50:36 +0200 | [diff] [blame] | 6 | |
| 7 | if exists('b:did_ftplugin') |
| 8 | finish |
| 9 | endif |
| 10 | let b:did_ftplugin = 1 |
| 11 | |
Eisuke Kawashima | fbbaa6e | 2025-04-16 18:20:59 +0200 | [diff] [blame] | 12 | let s:cpo_save = &cpo |
| 13 | set cpo&vim |
| 14 | |
Riley Bruins | fc533c9 | 2024-07-11 22:50:36 +0200 | [diff] [blame] | 15 | setlocal include=^\\s*\\(from\\\|import\\) |
| 16 | setlocal define=^\\s*\\(\\(async\\s\\+\\)\\?def\\\|class\\) |
| 17 | |
| 18 | " For imports with leading .., append / and replace additional .s with ../ |
| 19 | let b:grandparent_match = '^\(.\.\)\(\.*\)' |
| 20 | let b:grandparent_sub = '\=submatch(1)."/".repeat("../",strlen(submatch(2)))' |
| 21 | |
| 22 | " For imports with a single leading ., replace it with ./ |
| 23 | let b:parent_match = '^\.\(\.\)\@!' |
| 24 | let b:parent_sub = './' |
| 25 | |
| 26 | " Replace any . sandwiched between word characters with / |
| 27 | let b:child_match = '\(\w\)\.\(\w\)' |
| 28 | let b:child_sub = '\1/\2' |
| 29 | |
| 30 | setlocal includeexpr=substitute(substitute(substitute( |
| 31 | \v:fname, |
| 32 | \b:grandparent_match,b:grandparent_sub,''), |
| 33 | \b:parent_match,b:parent_sub,''), |
| 34 | \b:child_match,b:child_sub,'g') |
| 35 | |
| 36 | setlocal suffixesadd=.mojo |
| 37 | setlocal comments=b:#,fb:- |
| 38 | setlocal commentstring=#\ %s |
| 39 | |
| 40 | let b:undo_ftplugin = 'setlocal include<' |
| 41 | \ . '|setlocal define<' |
| 42 | \ . '|setlocal includeexpr<' |
| 43 | \ . '|setlocal suffixesadd<' |
| 44 | \ . '|setlocal comments<' |
| 45 | \ . '|setlocal commentstring<' |
Eisuke Kawashima | fbbaa6e | 2025-04-16 18:20:59 +0200 | [diff] [blame] | 46 | |
| 47 | let &cpo = s:cpo_save |
| 48 | unlet s:cpo_save |