public static ParsedDModule CreateFromDFile(ProjectDom prjDom, string file, TextReader content) { var doc = new ParsedDModule(file); doc.Flags |= ParsedDocumentFlags.NonSerializable; var parser = DParser.Create(content); // Parse the code var ast = doc.DDom = parser.Parse(); doc.LanguageAST = ast; ast.FileName = file; // Update project owner information if (prjDom != null && prjDom.Project is DProject) { var prj = prjDom.Project as DProject; var pf = prj.GetProjectFile(file); // Build appropriate module name var modName = pf.ProjectVirtualPath.ChangeExtension(null).ToString().Replace(Path.DirectorySeparatorChar, '.'); ast.ModuleName = modName; if (pf != null) pf.ExtendedProperties[DProject.DParserPropertyKey] = ast; } /* var cu = new CompilationUnit(file); doc.CompilationUnit = cu; //TODO: Usings var globalScope = new DomType(cu, ClassType.Unknown, Modifiers.None, "(Global Scope)", new DomLocation(1, 1), string.Empty, new DomRegion(1, int.MaxValue - 2)); cu.Add(globalScope); foreach (var n in ast) { var ch = ConvertDParserToDomNode(n, doc); if (ch is DomField || ch is DomMethod) globalScope.Add(ch as IMember); else cu.Add(ch as IType); }*/ foreach(ParserError parserError in parser.ParseErrors) { doc.Errors.Add(new Error(ErrorType.Error, parserError.Location.Line, parserError.Location.Column,parserError.Message)); } foreach (var cm in parser.TrackerVariables.Comments) { var c = new Projects.Dom.Comment(cm.CommentText); c.CommentType = cm.CommentType.HasFlag(D_Parser.Parser.Comment.Type.Block) ? CommentType.MultiLine : CommentType.SingleLine; c.IsDocumentation = cm.CommentType.HasFlag(D_Parser.Parser.Comment.Type.Documentation); c.Region = new DomRegion(cm.StartPosition.Line, cm.StartPosition.Column, cm.EndPosition.Line, cm.EndPosition.Column); } return doc; }
public static ParsedDModule CreateFromDFile(ProjectDom prjDom, string file, TextReader content) { var doc = new ParsedDModule(file); doc.Flags |= ParsedDocumentFlags.NonSerializable; var parser = DParser.Create(content); // Parse the code var ast = doc.DDom = parser.Parse(); doc.LanguageAST = ast; ast.FileName = file; // Update project owner information if (prjDom != null && prjDom.Project is DProject) { var prj = prjDom.Project as DProject; var pf = prj.GetProjectFile(file); // Build appropriate module name var modName = pf.ProjectVirtualPath.ChangeExtension(null).ToString().Replace(Path.DirectorySeparatorChar, '.'); ast.ModuleName = modName; if (pf != null) { pf.ExtendedProperties[DProject.DParserPropertyKey] = ast; } } /* * var cu = new CompilationUnit(file); * doc.CompilationUnit = cu; * * //TODO: Usings * * var globalScope = new DomType(cu, ClassType.Unknown, Modifiers.None, "(Global Scope)", new DomLocation(1, 1), string.Empty, new DomRegion(1, int.MaxValue - 2)); * * cu.Add(globalScope); * * foreach (var n in ast) * { * var ch = ConvertDParserToDomNode(n, doc); * * if (ch is DomField || ch is DomMethod) * globalScope.Add(ch as IMember); * else * cu.Add(ch as IType); * }*/ foreach (ParserError parserError in parser.ParseErrors) { doc.Errors.Add(new Error(ErrorType.Error, parserError.Location.Line, parserError.Location.Column, parserError.Message)); } foreach (var cm in parser.TrackerVariables.Comments) { var c = new Projects.Dom.Comment(cm.CommentText); c.CommentType = cm.CommentType.HasFlag(D_Parser.Parser.Comment.Type.Block) ? CommentType.MultiLine : CommentType.SingleLine; c.IsDocumentation = cm.CommentType.HasFlag(D_Parser.Parser.Comment.Type.Documentation); c.Region = new DomRegion(cm.StartPosition.Line, cm.StartPosition.Column, cm.EndPosition.Line, cm.EndPosition.Column); } return(doc); }