@@ -435,6 +435,25 @@ function! s:SlugToFileName(slug) abort
435435 return substitute (a: slug , ' -' , ' _' , ' g' )
436436endfunction
437437
438+ function ! s: ProblemSlugFromFileName () abort
439+ let parts = split (expand (' %:t:r' ), ' \.' ) " Filename without the extension
440+ if len (parts) == 1
441+ " Old style, e.g. two-sum
442+ return s: FileNameToSlug (parts[0 ])
443+ elseif len (parts) == 2 && parts[0 ] = ~ ' \v^[0-9]+$'
444+ " New style, e.g. 1.two-sum
445+ return s: FileNameToSlug (parts[1 ])
446+ elseif len (parts) == 2
447+ " Old style with submission id, e.g. two-sum.1234
448+ return s: FileNameToSlug (parts[0 ])
449+ elseif len (parts) == 3
450+ " New style with submission id, e.g. 1.two-sum.1234
451+ return s: FileNameToSlug (parts[1 ])
452+ else
453+ throw ' leetcode: invalid file name: ' . expand (' %:t:r' )
454+ endif
455+ endfunction
456+
438457function ! s: HandleProblemListCR () abort
439458 " Parse the problem number from the line
440459 let line_nr = line (' .' )
@@ -490,7 +509,8 @@ function! s:HandleProblemListCR() abort
490509 let problem = s: GetProblem (problem_id)
491510 let problem_slug = problem[' slug' ]
492511 let problem_ext = s: SolutionFileExt (g: leetcode_solution_filetype )
493- let problem_file_name = printf (' %s.%s.%s' , problem_id, s: SlugToFileName (problem_slug),
512+ let problem_file_name = printf (' %s.%s.%s' , problem_id,
513+ \ s: SlugToFileName (problem_slug),
494514 \ problem_ext)
495515
496516 if buflisted (problem_file_name)
@@ -632,13 +652,7 @@ function! leetcode#ResetSolution(with_latest_submission) abort
632652 return
633653 endif
634654
635- let problem_file_name = expand (' %:t:r' )
636- let problem_file_names = split (problem_file_name, ' \.' )
637- let problem_name = problem_file_names[0 ]
638- if len (problem_file_names) > 1
639- let problem_name = problem_file_names[1 ]
640- endif
641- let problem_slug = s: FileNameToSlug (problem_name)
655+ let problem_slug = s: ProblemSlugFromFileName ()
642656 let expr = printf (' leetcode.get_problem("%s")' , problem_slug)
643657 let problem = py3eval (expr )
644658 if type (problem) != v: t_dict
@@ -780,13 +794,7 @@ function! leetcode#TestSolution() abort
780794 return
781795 endif
782796
783- let file_name = s: FileNameToSlug (expand (' %:t:r' ))
784- if file_name == ' '
785- echo ' no file name'
786- return
787- endif
788-
789- let slug = split (file_name, ' \.' )[0 ]
797+ let slug = s: ProblemSlugFromFileName ()
790798 let filetype = s: GuessFileType ()
791799
792800 if exists (' b:leetcode_problem' )
@@ -889,13 +897,7 @@ function! leetcode#SubmitSolution() abort
889897 return
890898 endif
891899
892- let file_name = s: FileNameToSlug (expand (' %:t:r' ))
893- if file_name == ' '
894- echo ' no file name'
895- return
896- endif
897-
898- let slug = split (file_name, ' \.' )[0 ]
900+ let slug = s: ProblemSlugFromFileName ()
899901 let filetype = s: GuessFileType ()
900902
901903 if has (' timers' )
@@ -1174,7 +1176,9 @@ function! s:HandleSubmissionsCR() abort
11741176 return
11751177 endif
11761178
1177- let file_name = printf (' %s.%s.%s' , s: SlugToFileName (submission[' slug' ]),
1179+ let file_name = printf (' %s.%s.%s.%s' ,
1180+ \ submission[' problem_id' ],
1181+ \ s: SlugToFileName (submission[' slug' ]),
11781182 \ submission_id, s: SolutionFileExt (submission[' filetype' ]))
11791183
11801184 if bufexists (file_name)
0 commit comments