static void WriteClassDeclaration (DocumentInfo info, StringBuilder builder) { builder.Append ("partial class "); builder.Append (info.ClassName); builder.Append (" : "); builder.AppendLine (info.BaseType); }
public override IEnumerable<MemberReference> FindReferences (ProjectDom dom, FilePath fileName, IEnumerable<INode> searchedMembers) { var editor = TextFileProvider.Instance.GetTextEditorData (fileName); AspNetAppProject project = dom.Project as AspNetAppProject; if (project == null) yield break; var unit = AspNetParserService.GetCompileUnit (project, fileName, true); if (unit == null) yield break; var refman = new DocumentReferenceManager (project); var parsedAspDocument = (AspNetParsedDocument)new AspNetParser ().Parse (dom, fileName, editor.Text); refman.Doc = parsedAspDocument; var usings = refman.GetUsings (); var documentInfo = new DocumentInfo (dom, unit, usings, refman.GetDoms ()); var builder = new AspLanguageBuilder (); var buildDocument = new Mono.TextEditor.Document (); var offsetInfos = new List<LocalDocumentInfo.OffsetInfo> (); buildDocument.Text = builder.BuildDocumentString (documentInfo, editor, offsetInfos, true); var parsedDocument = AspLanguageBuilder.Parse (dom, fileName, buildDocument.Text); foreach (var member in searchedMembers) { foreach (var reference in SearchMember (member, dom, fileName, editor, buildDocument, offsetInfos, parsedDocument)) { yield return reference; } } }
public LocalDocumentInfo BuildLocalDocument (DocumentInfo info, TextEditorData data, string expressionText, string textAfterCaret, bool isExpression) { var sb = new StringBuilder (); WriteUsings (info.Imports, sb); WriteClassDeclaration (info, sb); sb.AppendLine ("{"); var result = new LocalDocumentInfo (); if (isExpression) { sb.AppendLine ("void Generated ()"); sb.AppendLine ("{"); //Console.WriteLine ("start:" + location.BeginLine +"/" +location.BeginColumn); foreach (var node in info.XExpressions) { bool isBlock = node is AspNetRenderBlock; if (node.Region.Begin.Line > data.Caret.Line || node.Region.Begin.Line == data.Caret.Line && node.Region.Begin.Column > data.Caret.Column - 5) continue; //Console.WriteLine ("take xprt:" + expressions.Key.BeginLine +"/" +expressions.Key.BeginColumn); var start = data.Document.LocationToOffset (node.Region.Begin.Line, node.Region.Begin.Column) + 2; var end = data.Document.LocationToOffset (node.Region.End.Line, node.Region.End.Column) - 2; if (!isBlock) { sb.Append ("WriteLine ("); start += 1; } string expr = data.GetTextBetween (start, end); result.AddTextPosition (start, end, expr.Length); sb.Append (expr); if (!isBlock) sb.Append (");"); } } sb.Append (expressionText); int caretPosition = sb.Length; sb.Append (textAfterCaret); sb.AppendLine (); sb.AppendLine ("}"); sb.AppendLine ("}"); result.LocalDocument = sb.ToString (); result.CaretPosition = caretPosition; result.OriginalCaretPosition = data.Caret.Offset; result.ParsedLocalDocument = Parse (info.AspNetDocument.FileName, sb.ToString ()); return result; }
public override IEnumerable<MemberReference> FindReferences (ProjectDom dom, FilePath fileName, INode member) { var editor = TextFileProvider.Instance.GetTextEditorData (fileName); AspNetAppProject project = dom.Project as AspNetAppProject; System.Console.WriteLine ("project:" + project); if (project == null) yield break; var unit = AspNetParserService.GetCompileUnit (project, fileName, true); System.Console.WriteLine ("unit:" + unit); if (unit == null) yield break; System.Console.WriteLine ("go "); var refman = new DocumentReferenceManager (project); var parsedAspDocument = (AspNetParsedDocument)new AspNetParser ().Parse (dom, fileName, editor.Text); refman.Doc = parsedAspDocument; var usings = refman.GetUsings (); var documentInfo = new DocumentInfo (unit, usings, refman.GetDoms ()); var builder = new AspLanguageBuilder (); var buildDocument = new Mono.TextEditor.Document (); var offsetInfos = new List<LocalDocumentInfo.OffsetInfo> (); buildDocument.Text = builder.BuildDocumentString (documentInfo, editor, offsetInfos, true); var parsedDocument = AspLanguageBuilder.Parse (fileName, buildDocument.Text); var resolver = new NRefactoryResolver (dom, parsedDocument.CompilationUnit, ICSharpCode.NRefactory.SupportedLanguage.CSharp, editor, fileName); FindMemberAstVisitor visitor = new FindMemberAstVisitor (buildDocument, resolver, member); visitor.IncludeXmlDocumentation = IncludeDocumentation; visitor.RunVisitor (); foreach (var result in visitor.FoundReferences) { var offsetInfo = offsetInfos.FirstOrDefault (info => info.ToOffset <= result.Position && result.Position < info.ToOffset + info.Length); if (offsetInfo == null) continue; var offset = offsetInfo.FromOffset + result.Position - offsetInfo.ToOffset; var loc = editor.OffsetToLocation (offset); yield return new MemberReference (null, fileName, offset, loc.Line, loc.Column, result.Name, null); } }
public LocalDocumentInfo BuildLocalDocument (DocumentInfo info, TextEditorData data, string expressionText, string textAfterCaret, bool isExpression) { var sb = new StringBuilder (); WriteUsings (info.Imports, sb); WriteClassDeclaration (info, sb); sb.AppendLine ("{"); var result = new LocalDocumentInfo (); if (isExpression) { sb.AppendLine ("void Generated ()"); sb.AppendLine ("{"); //Console.WriteLine ("start:" + location.BeginLine +"/" +location.BeginColumn); foreach (var expression in info.Expressions) { if (expression.Location.BeginLine > data.Caret.Line || expression.Location.BeginLine == data.Caret.Line && expression.Location.BeginColumn > data.Caret.Column - 5) continue; //Console.WriteLine ("take xprt:" + expressions.Key.BeginLine +"/" +expressions.Key.BeginColumn); if (expression.IsExpression) sb.Append ("WriteLine ("); string expr = expression.Expression.Trim ('='); result.AddTextPosition (data.Document.LocationToOffset (expression.Location.BeginLine, expression.Location.BeginColumn), sb.Length, expr.Length); sb.Append (expr); if (expression.IsExpression) sb.Append (");"); } } sb.Append (expressionText); int caretPosition = sb.Length; sb.Append (textAfterCaret); sb.AppendLine (); sb.AppendLine ("}"); sb.AppendLine ("}"); result.LocalDocument = sb.ToString (); result.CaretPosition = caretPosition; result.OriginalCaretPosition = data.Caret.Offset; result.ParsedLocalDocument = Parse (info.AspNetDocument.FileName, sb.ToString ()); return result; }
public LocalDocumentInfo BuildLocalDocument (DocumentInfo info, TextEditorData data, string expressionText, string textAfterCaret, bool isExpression) { var result = new StringBuilder (); WriteUsings (info.Imports, result); WriteClassDeclaration (info, result); result.AppendLine ("{"); if (isExpression) { result.AppendLine ("void Generated ()"); result.AppendLine ("{"); //Console.WriteLine ("start:" + location.BeginLine +"/" +location.BeginColumn); foreach (var expression in info.Expressions) { if (expression.Location.BeginLine > data.Caret.Line || expression.Location.BeginLine == data.Caret.Line && expression.Location.BeginColumn > data.Caret.Column - 5) continue; //Console.WriteLine ("take xprt:" + expressions.Key.BeginLine +"/" +expressions.Key.BeginColumn); if (expression.IsExpression) result.Append ("WriteLine ("); result.Append (expression.Expression.Trim ('=')); if (expression.IsExpression) result.Append (");"); } } result.Append (expressionText); int caretPosition = result.Length; result.Append (textAfterCaret); result.AppendLine (); result.AppendLine ("}"); result.AppendLine ("}"); return new LocalDocumentInfo () { LocalDocument = result.ToString (), CaretPosition = caretPosition, ParsedLocalDocument = Parse (info.AspNetDocument.FileName, result.ToString ()) }; }
public IParameterDataProvider HandleParameterCompletion (MonoDevelop.Ide.Gui.Document realDocument, CodeCompletionContext completionContext, DocumentInfo info, LocalDocumentInfo localInfo, char completionChar) { CodeCompletionContext ccc; using (var completion = CreateCompletion (realDocument, info, localInfo, out ccc)) { return completion.HandleParameterCompletion (completionContext, completionChar); } }
public ICompletionDataList HandleCompletion (MonoDevelop.Ide.Gui.Document realDocument, CodeCompletionContext completionContext, DocumentInfo info, LocalDocumentInfo localInfo, char currentChar, ref int triggerWordLength) { CodeCompletionContext ccc; using (var completion = CreateCompletion (realDocument, info, localInfo, out ccc)) { return completion.HandleCodeCompletion (completionContext, currentChar, ref triggerWordLength); } }
public ICompletionDataList HandlePopupCompletion (MonoDevelop.Ide.Gui.Document realDocument, DocumentInfo info, LocalDocumentInfo localInfo) { CodeCompletionContext codeCompletionContext; using (var completion = CreateCompletion (realDocument, info, localInfo, out codeCompletionContext)) { return completion.CodeCompletionCommand (codeCompletionContext); } }
public string BuildDocumentString (DocumentInfo info, TextEditorData data, List<LocalDocumentInfo.OffsetInfo> offsetInfos = null, bool buildExpressions = false) { var document = new StringBuilder (); WriteUsings (info.Imports, document); foreach (var node in info.XScriptBlocks) { var start = data.Document.LocationToOffset (node.Region.Begin.Line, node.Region.Begin.Column) + 2; var end = data.Document.LocationToOffset (node.Region.End.Line, node.Region.End.Column) - 2; if (offsetInfos != null) offsetInfos.Add (new LocalDocumentInfo.OffsetInfo (start, document.Length, end - start)); document.AppendLine (data.Document.GetTextBetween (start, end)); } if (buildExpressions) { WriteClassDeclaration (info, document); document.AppendLine ("{"); document.AppendLine ("void Generated ()"); document.AppendLine ("{"); //Console.WriteLine ("start:" + location.BeginLine +"/" +location.BeginColumn); foreach (var node in info.XExpressions) { bool isBlock = node is AspNetRenderBlock; var start = data.Document.LocationToOffset (node.Region.Begin.Line, node.Region.Begin.Column) + 2; var end = data.Document.LocationToOffset (node.Region.End.Line, node.Region.End.Column) - 2; if (!isBlock) { document.Append ("WriteLine ("); start += 1; } string expr = data.GetTextBetween (start, end); if (offsetInfos != null) { offsetInfos.Add (new LocalDocumentInfo.OffsetInfo (start, document.Length, expr.Length)); } document.Append (expr); if (!isBlock) document.Append (");"); } document.AppendLine ("}"); document.AppendLine ("}"); } return document.ToString (); }
public ParsedDocument BuildDocument (DocumentInfo info, TextEditorData data) { var docStr = BuildDocumentString (info, data); return Parse (info.Dom, info.AspNetDocument.FileName, docStr); }
CSharpCompletionTextEditorExtension CreateCompletion (MonoDevelop.Ide.Gui.Document realDocument, DocumentInfo info, LocalDocumentInfo localInfo, out CodeCompletionContext codeCompletionContext) { var doc = new Mono.TextEditor.TextDocument () { Text = localInfo.LocalDocument, }; var documentLocation = doc.OffsetToLocation (localInfo.CaretPosition); codeCompletionContext = new CodeCompletionContext () { TriggerOffset = localInfo.CaretPosition, TriggerLine = documentLocation.Line, TriggerLineOffset = documentLocation.Column - 1 }; return new CSharpCompletionTextEditorExtension (localInfo.HiddenDocument) { CompletionWidget = CreateCompletionWidget (realDocument, localInfo) }; }
//FIXME: use all the doms //FIXME: merge the items from the members visitor too public AspProjectDomWrapper (DocumentInfo info) : base (info.References[0]) { this.info = info; }
public ExpressionCollector(DocumentInfo parent) { this.parent = parent; }
public bool GetParameterCompletionCommandOffset (MonoDevelop.Ide.Gui.Document realDocument, DocumentInfo info, LocalDocumentInfo localInfo, out int cpos) { CodeCompletionContext codeCompletionContext; using (var completion = CreateCompletion (realDocument, info, localInfo, out codeCompletionContext)) { return completion.GetParameterCompletionCommandOffset (out cpos); } }
CSharpTextEditorCompletion CreateCompletion (MonoDevelop.Ide.Gui.Document realDocument, DocumentInfo info, LocalDocumentInfo localInfo, out CodeCompletionContext codeCompletionContext) { var doc = new Mono.TextEditor.Document () { Text = localInfo.LocalDocument, }; var documentLocation = doc.OffsetToLocation (localInfo.CaretPosition); codeCompletionContext = new CodeCompletionContext () { TriggerOffset = localInfo.CaretPosition, TriggerLine = documentLocation.Line, TriggerLineOffset = documentLocation.Column - 1 }; var r = new System.IO.StringReader (localInfo.LocalDocument); using (var parser = ICSharpCode.NRefactory.ParserFactory.CreateParser (SupportedLanguage.CSharp, r)) { parser.Parse (); return new CSharpTextEditorCompletion (localInfo.HiddenDocument) { ParsedUnit = parser.CompilationUnit, CompletionWidget = CreateCompletionWidget (realDocument, localInfo), Dom = localInfo.HiddenDocument.Dom }; } }
public IParameterDataProvider HandleParameterCompletion (MonoDevelop.Ide.Gui.Document document, DocumentInfo info, LocalDocumentInfo localInfo, ProjectDom dom, char completionChar) { CodeCompletionContext codeCompletionContext; using (var completion = CreateCompletion (document, info, localInfo, dom, out codeCompletionContext)) { return completion.HandleParameterCompletion (codeCompletionContext, completionChar); } }
public string BuildDocumentString (DocumentInfo info, TextEditorData data, List<LocalDocumentInfo.OffsetInfo> offsetInfos = null, bool buildExpressions = false) { var document = new StringBuilder (); WriteUsings (info.Imports, document); foreach (var node in info.ScriptBlocks) { int start = data.Document.LocationToOffset (node.Location.EndLine, node.Location.EndColumn); int end = data.Document.LocationToOffset (node.EndLocation.BeginLine, node.EndLocation.BeginColumn); if (offsetInfos != null) offsetInfos.Add (new LocalDocumentInfo.OffsetInfo (start, document.Length, end - start)); document.AppendLine (data.Document.GetTextBetween (start, end)); } if (buildExpressions) { WriteClassDeclaration (info, document); document.AppendLine ("{"); document.AppendLine ("void Generated ()"); document.AppendLine ("{"); //Console.WriteLine ("start:" + location.BeginLine +"/" +location.BeginColumn); foreach (var expression in info.Expressions) { if (expression.IsExpression) document.Append ("WriteLine ("); string expr = expression.Expression.Trim ('='); if (offsetInfos != null) { int col = expression.Location.BeginColumn + "<%".Length + 2; if (expr.Length < expression.Expression.Length) col++; offsetInfos.Add (new LocalDocumentInfo.OffsetInfo (data.Document.LocationToOffset (expression.Location.BeginLine, col), document.Length, expr.Length)); } document.Append (expr); if (expression.IsExpression) document.Append (");"); } document.AppendLine ("}"); document.AppendLine ("}"); } return document.ToString (); }
public ParsedDocument BuildDocument (DocumentInfo info, TextEditorData data) { var document = new StringBuilder (); WriteUsings (info.Imports, document); WriteClassDeclaration (info, document); foreach (var node in info.ScriptBlocks) { int start = data.Document.LocationToOffset (node.Location.EndLine - 1, node.Location.EndColumn); int end = data.Document.LocationToOffset (node.EndLocation.BeginLine - 1, node.EndLocation.BeginColumn); document.AppendLine (data.Document.GetTextBetween (start, end)); } var docStr = document.ToString (); document.Length = 0; return Parse (info.AspNetDocument.FileName, docStr); }
public ExpressionCollector (DocumentInfo parent) { this.parent = parent; }
//FIXME: use all the doms //FIXME: merge the items from the members visitor too public AspProjectDomWrapper(DocumentInfo info) : base(info.References[0]) { this.info = info; }