Bläddra i källkod

Don't get confused by commands in arguments in autocomplete

James Allen 9 år sedan
förälder
incheckning
b2257db2c2

+ 4 - 4
services/web/public/coffee/ide/editor/directives/aceEditor/auto-complete/AutoCompleteManager.coffee

@@ -213,10 +213,10 @@ define [
 											range.start.column,
 											range.start.column,
 										)
 										)
 									)
 									)
-									# Delete back to last backslash, as appropriate
-									lastBackslashIndex = lineUpToCursor.lastIndexOf('\\')
-									if lastBackslashIndex != -1
-										leftRange.start.column = lastBackslashIndex
+									# Delete back to command start, as appropriate
+									commandStartIndex = Helpers.getLastCommandFragmentIndex(lineUpToCursor)
+									if commandStartIndex != -1
+										leftRange.start.column = commandStartIndex
 									else
 									else
 										leftRange.start.column -= completions.filterText.length
 										leftRange.start.column -= completions.filterText.length
 									editor.session.remove(leftRange)
 									editor.session.remove(leftRange)

+ 14 - 2
services/web/public/coffee/ide/editor/directives/aceEditor/auto-complete/Helpers.coffee

@@ -6,11 +6,23 @@ define [
 
 
 	Helpers =
 	Helpers =
 		getLastCommandFragment: (lineUpToCursor) ->
 		getLastCommandFragment: (lineUpToCursor) ->
-			if m = lineUpToCursor.match(/(\\[^\\]+)$/)
-				return m[1]
+			if (index = Helpers.getLastCommandFragmentIndex(lineUpToCursor)) > -1
+				return lineUpToCursor.slice(index)
 			else
 			else
 				return null
 				return null
 
 
+		getLastCommandFragmentIndex: (lineUpToCursor) ->
+			# This is hack to let us skip over commands in arguments, and
+			# go to the command on the same 'level' as us. E.g.
+			#    \includegraphics[width=\textwidth]{..
+			# should not match the \textwidth.
+			blankArguments = lineUpToCursor.replace /\[([^\]]*)\]/g, (args) ->
+				Array(args.length+1).join('.')
+			if m = blankArguments.match(/(\\[^\\]+)$/)
+				return m.index
+			else
+				return -1
+
 		getCommandNameFromFragment: (commandFragment) ->
 		getCommandNameFromFragment: (commandFragment) ->
 			commandFragment?.match(/\\(\w+)\{/)?[1]
 			commandFragment?.match(/\\(\w+)\{/)?[1]