public bool TryGetUE4Macro(SnapshotPoint triggerPoint, out UE4MacroStatement ue4MacroStatement) { ue4MacroStatement = null; var currentPoint = triggerPoint - 1; var extent = _navigator.GetExtentOfWord(currentPoint); var statement = _navigator.GetSpanOfEnclosing(extent.Span); var statementText = statement.GetText(); var match = Regex.Match(statementText, $@"({UE4Statics.MacroNamesRegExPatern})\((.*)\)", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(100)); if (!match.Success) { return(false); } if (!match.Groups[1].Success || !match.Groups[2].Success) { return(false); } var contentPosition = statement.Start + match.Groups[2].Index; var contentEnd = contentPosition + match.Groups[2].Length; var specifiersSpan = new SnapshotSpan(contentPosition, contentEnd); var macro = (UE4Macros)Enum.Parse(typeof(UE4Macros), match.Groups[1].Value.ToUpper()); ue4MacroStatement = new UE4MacroStatement(specifiersSpan, macro); return(true); }
public UE4SpecifierNotValidSuggestedAction(ITrackingSpan span, UE4MacroStatement ue4Statement) { _span = span; _ue4Statement = ue4Statement; _snapshot = span.TextBuffer.CurrentSnapshot; DisplayText = $"'{span.GetText(_snapshot)}' is not valid {ue4Statement.MacroConst} specifier"; }
public UE4SpecifierCollisitionSuggestedAction(ITrackingSpan span, UE4MacroStatement ue4Statement) { _span = span; _ue4Statement = ue4Statement; _snapshot = span.TextBuffer.CurrentSnapshot; _lower = span.GetText(_snapshot).ToLower(); DisplayText = $"Convert '{span.GetText(_snapshot)}' to lower case"; }
public void ParseSpecifiers(SnapshotPoint triggerPoint, ref UE4MacroStatement macroStatement, out bool inMeta) { inMeta = false; if (string.IsNullOrWhiteSpace(macroStatement?.SpecifiersSpan.GetText())) { return; } var inputstr = macroStatement.SpecifiersSpan.GetText(); var currentPoint = triggerPoint - 1; var matchSpecs = Regex.Matches(inputstr, @"meta\s*=\s*\(([\w\s=""]+\,?)*\)|(\w+\s*=?\s*[\w""]*)\,?", RegexOptions.IgnorePatternWhitespace, TimeSpan.FromMilliseconds(1000)); var specifiersList = new List <string>(); var metaList = new List <string>(); foreach (var spec in matchSpecs) { var mm = (Match)spec; if (mm.Groups[1].Success) { var metaPositionStart = macroStatement.SpecifiersSpan.Start + mm.Groups[1].Index; var metaPositionEnd = metaPositionStart + mm.Groups[1].Length; if (!inMeta) { inMeta = currentPoint >= metaPositionStart && currentPoint <= metaPositionEnd; } foreach (var ms in mm.Groups[1].Captures) { var item = ((Capture)ms).Value.Trim(' ', ','); metaList.Add(item); } } if (mm.Groups[2].Success) { var item = mm.Groups[2].Value.Trim(' ', ','); specifiersList.Add(item); } } macroStatement.MetaSpecifiers = metaList.ToArray(); macroStatement.Specifiers = specifiersList.ToArray(); }