Avoid doing stridx twice
This commit is contained in:
		
							
								
								
									
										23
									
								
								lc.vim
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								lc.vim
									
									
									
									
									
								
							@@ -5,26 +5,29 @@ class Item
 | 
				
			|||||||
    const val: string
 | 
					    const val: string
 | 
				
			||||||
endclass
 | 
					endclass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def GetLongestSuffix(hay: string, ndl: string): string
 | 
					def GetLongestSuffix(hay: string, ndl: string): tuple<string, number>
 | 
				
			||||||
    var s = ndl
 | 
					    var s = ndl
 | 
				
			||||||
    var l = len(ndl)
 | 
					    var l = len(ndl)
 | 
				
			||||||
    while stridx(hay, s) == -1
 | 
					    while true
 | 
				
			||||||
        s = strpart(s, 1)
 | 
					        const idx = stridx(hay, s)
 | 
				
			||||||
 | 
					        if idx != -1
 | 
				
			||||||
 | 
					            return (s, idx)
 | 
				
			||||||
 | 
					        endif
 | 
				
			||||||
        l = l - 1
 | 
					        l = l - 1
 | 
				
			||||||
        if l == 0
 | 
					        if l == 0
 | 
				
			||||||
            return ""
 | 
					            break
 | 
				
			||||||
        endif
 | 
					        endif
 | 
				
			||||||
 | 
					        s = strpart(s, 1)
 | 
				
			||||||
    endwhile
 | 
					    endwhile
 | 
				
			||||||
    return s
 | 
					    return ("", 0)
 | 
				
			||||||
enddef
 | 
					enddef
 | 
				
			||||||
# echo GetLongestSuffix("hello world", "world")->assert_equal("world")
 | 
					# echo GetLongestSuffix("hello world", "world")->assert_equal(("world", 6))
 | 
				
			||||||
# echo GetLongestSuffix("hello world", "foo world")->assert_equal("o world")
 | 
					# echo GetLongestSuffix("hello world", "foo world")->assert_equal(("o world", 4))
 | 
				
			||||||
# echo GetLongestSuffix("hello world foo bar blah", "foo world")->assert_equal("o world")
 | 
					# echo GetLongestSuffix("hello world foo bar blah", "foo world")->assert_equal(("o world", 4))
 | 
				
			||||||
# echo v:errors
 | 
					# echo v:errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def GetMatch(base: string, line: string): Item
 | 
					def GetMatch(base: string, line: string): Item
 | 
				
			||||||
    const s = GetLongestSuffix(line, base)
 | 
					    const [s, idx] = GetLongestSuffix(line, base)
 | 
				
			||||||
    const idx = stridx(line, s)
 | 
					 | 
				
			||||||
    const slen = strlen(s)
 | 
					    const slen = strlen(s)
 | 
				
			||||||
    const  m = strpart(line, idx + slen)
 | 
					    const  m = strpart(line, idx + slen)
 | 
				
			||||||
    return Item.new(slen, base .. m)
 | 
					    return Item.new(slen, base .. m)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user