public IEnumerable <IntelliSenseItem> Generate(TextDocument document, Caret caret) { IEnumerable <string> docIdents = null; string curWord = null; int caretOffset = 0; Application.Current.Dispatcher.Invoke(() => { caretOffset = caret.Offset; curWord = document.GetWordAround(caret.Offset - 1); docIdents = document.GetAllSqfIdents().ToList(); }); var sqfDefs = from def in ConfigHost.Instance.SqfDefinitions where def.Kind != RealVirtuality.SQF.SqfDefinition.EKind.Type && def.Name.StartsWith(curWord) orderby def.Name select def; docIdents = (from str in docIdents where str.StartsWith(curWord) && !sqfDefs.Any((def) => def.Name.Equals(str, StringComparison.InvariantCultureIgnoreCase)) orderby str select str).Distinct(); foreach (var it in docIdents) { yield return(new IntelliSenseItem((td) => td.Insert(caretOffset, it.Remove(0, curWord.Length)), it) { ImageSource = @"/ArmA.Studio;component/Resources/Pictograms/Field/Field_16x.png" }); } var l = new List <string>(sqfDefs.Count()); foreach (var it in sqfDefs) { if (l.Contains(it.Name)) { continue; } yield return(new IntelliSenseItem((td) => td.Insert(caretOffset, it.Name.Remove(0, curWord.Length)), it.Name) { Description = it.Description }); l.Add(it.Name); } }