From 8122132e26e15456dca36b51835863be4093ee62 Mon Sep 17 00:00:00 2001 From: Hackerpilot Date: Tue, 13 Nov 2012 15:27:25 -0800 Subject: [PATCH] More autocomplete improvements --- autocomplete.d | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/autocomplete.d b/autocomplete.d index 510a81d..91802f2 100644 --- a/autocomplete.d +++ b/autocomplete.d @@ -92,20 +92,27 @@ body { switch (tokens[i].type) { - case TokenType.Return: - case TokenType.New: - case TokenType.Case: - case TokenType.Assign: - case TokenType.Delete: - case TokenType.LBrace: - case TokenType.LParen: - case TokenType.Equals: - case TokenType.Plus: - case TokenType.Import: - case TokenType.LBracket: - case TokenType.Comma: - case TokenType.Semicolon: - case TokenType.RBrace: + case TokenType.Assign: case TokenType.BitAnd: case TokenType.BitAndEquals: + case TokenType.BitOr: case TokenType.BitOrEquals: case TokenType.CatEquals: + case TokenType.Colon: case TokenType.Comma: case TokenType.Decrement: + case TokenType.Div: case TokenType.DivEquals: case TokenType.Dollar: + case TokenType.Dot: case TokenType.Equals: case TokenType.GoesTo: + case TokenType.Greater: case TokenType.GreaterEqual: case TokenType.Hash: + case TokenType.Increment: case TokenType.LBrace: case TokenType.LBracket: + case TokenType.Less: case TokenType.LessEqual: case TokenType.LessEqualGreater: + case TokenType.LessOrGreater: case TokenType.LogicAnd: case TokenType.LogicOr: + case TokenType.LParen: case TokenType.Minus: case TokenType.MinusEquals: + case TokenType.Mod: case TokenType.ModEquals: case TokenType.MulEquals: + case TokenType.Not: case TokenType.NotEquals: case TokenType.NotGreater: + case TokenType.NotGreaterEqual: case TokenType.NotLess: case TokenType.NotLessEqual: + case TokenType.NotLessEqualGreater: case TokenType.Plus: case TokenType.PlusEquals: + case TokenType.Pow: case TokenType.PowEquals: case TokenType.RBrace: + case TokenType.Semicolon: case TokenType.ShiftLeft: case TokenType.ShiftLeftEqual: + case TokenType.ShiftRight: case TokenType.ShiftRightEqual: case TokenType.Slice: + case TokenType.Star: case TokenType.Ternary: case TokenType.Tilde: + case TokenType.Unordered: case TokenType.UnsignedShiftRight: case TokenType.UnsignedShiftRightEqual: + case TokenType.Vararg: case TokenType.Xor: case TokenType.XorEquals: + case TokenType.KEYWORDS_BEGIN: .. case TokenType.KEYWORDS_END: return i + 1; case TokenType.RParen: if (i == 0) @@ -295,6 +302,13 @@ struct AutoComplete stderr.writeln("dotComplete"); auto index = assumeSorted(tokens).lowerBound(cursor).length - 1; Token t = tokens[index]; + + // If the last character entered before the cursor isn't a dot, give up. + // The user was probably in the middle of typing the slice or vararg + // operators + if (t != TokenType.Dot) + return null; + size_t startIndex = findBeginningOfExpression(tokens, index); if (startIndex - 1 < tokens.length && tokens[startIndex - 1] == TokenType.Import) {