public IPhpScriptTypeSymbol ResolveFile(string path) { if (string.IsNullOrEmpty(path)) { return(null); } // normalize path path = FileUtilities.NormalizeRelativePath(path, null, _compilation.Options.BaseDirectory); // absolute path if (PathUtilities.IsAbsolute(path)) { path = PhpFileUtilities.GetRelativePath(path, _compilation.Options.BaseDirectory); } // lookup referenced assemblies // ./ handled by context semantics // ../ handled by context semantics // TODO: lookup include paths // TODO: calling script directory // cwd var script = GetScriptsFromReferencedAssemblies().FirstOrDefault(t => t.RelativeFilePath == path); // TODO: RoutineSemantics // relative to current script return(script ?? _next.ResolveFile(path)); }
public IPhpScriptTypeSymbol ResolveFile(string path) { if (string.IsNullOrEmpty(path)) { return(null); } // normalize path path = FileUtilities.NormalizeRelativePath(path, null, Compilation.Options.BaseDirectory); // absolute path if (PathUtilities.IsAbsolute(path)) { path = PhpFileUtilities.GetRelativePath(path, Compilation.Options.BaseDirectory); } // ./ handled by context semantics // ../ handled by context semantics // TODO: lookup include paths // TODO: calling script directory // cwd return(_table.GetFile(path)); }
/// <summary> /// Gets enumeration of user declared routines (global code, functions, methods and lambdas) in the specified file /// identified by its syntax tree. /// </summary> public IEnumerable <IPhpRoutineSymbol> GetUserDeclaredRoutinesInFile(PhpSyntaxTree syntaxTree) { string relativePath = PhpFileUtilities.GetRelativePath( PhpFileUtilities.NormalizeSlashes(syntaxTree.Source.FilePath), PhpFileUtilities.NormalizeSlashes(_options.BaseDirectory)); var fileSymbol = _tables.GetFile(relativePath); return(fileSymbol?.GetAllRoutines() ?? ImmutableArray <SourceRoutineSymbol> .Empty); }
public bool RemoveSyntaxTree(string fname) { var relative = PhpFileUtilities.GetRelativePath(fname, _compilation.Options.BaseDirectory); if (_files.Remove(relative)) { _version++; return(true); } return(false); }
protected string CreateRelativeFilePath(string fullPath) { var relpath = PhpFileUtilities.GetRelativePath( PhpFileUtilities.NormalizeSlashes(fullPath), PhpFileUtilities.NormalizeSlashes(_compilation.Options.BaseDirectory)); if (!string.IsNullOrEmpty(_compilation.Options.SubDirectory)) { relpath = PhpFileUtilities.NormalizeSlashes(PathUtilities.CombinePathsUnchecked(_compilation.Options.SubDirectory, relpath)); } return(relpath); }
SourceFileSymbol ISemanticModel.GetFile(string path) { // normalize path path = FileUtilities.NormalizeRelativePath(path, null, _baseDirectory); // absolute path if (PathUtilities.IsAbsolute(path)) { path = PhpFileUtilities.GetRelativePath(path, _baseDirectory); } // ./ handled by context semantics // ../ handled by context semantics // TODO: lookup include paths // TODO: calling script directory // cwd return(GetFile(path)); }
private ParsedSource ParseFile( TextWriter consoleOutput, PhpParseOptions parseOptions, PhpParseOptions scriptParseOptions, ref bool hadErrors, CommandLineSourceFile file, ErrorLogger errorLogger) { if (file.Path.IsPharFile()) { // phar file archive var phar = Devsense.PHP.Phar.PharFile.OpenPharFile(file.Path); // TODO: report exception // treat the stub as a regular source code: var stub = PhpSyntaxTree.ParseCode(SourceText.From(GetPharStub(phar), Encoding.UTF8), parseOptions, scriptParseOptions, file.Path); // TODO: ConcurrentBuild -> Parallel var prefix = PhpFileUtilities.NormalizeSlashes(PhpFileUtilities.GetRelativePath(file.Path, Arguments.BaseDirectory)); var trees = new List <PhpSyntaxTree>(); var content = new List <Devsense.PHP.Phar.Entry>(); foreach (var entry in phar.Manifest.Entries.Values) { var entryName = PhpFileUtilities.NormalizeSlashes(entry.Name); if (entry.IsCompileEntry()) { var tree = PhpSyntaxTree.ParseCode(SourceText.From(entry.Code, Encoding.UTF8), parseOptions, scriptParseOptions, prefix + "/" + entryName); tree.PharStubFile = stub; trees.Add(tree); } else { content.Add(entry); } } // create resource file var resources = new ResourceDescription($"phar://{prefix}.resources", () => { var stream = new MemoryStream(); var writer = new System.Resources.ResourceWriter(stream); foreach (var entry in content) { var entryName = PhpFileUtilities.NormalizeSlashes(entry.Name); writer.AddResource(entryName, entry.Code); } // writer.Generate(); stream.Position = 0; return(stream); }, isPublic: true); // TODO: report errors if any return(new ParsedSource { SyntaxTree = stub, Manifest = phar.Manifest, Trees = trees, Resources = resources, }); } else { // single source file var diagnosticInfos = new List <DiagnosticInfo>(); var content = TryReadFileContent(file, diagnosticInfos); if (diagnosticInfos.Count != 0) { ReportErrors(diagnosticInfos, consoleOutput, errorLogger); hadErrors = true; } PhpSyntaxTree result = null; if (content != null) { result = PhpSyntaxTree.ParseCode(content, parseOptions, scriptParseOptions, file.Path); } if (result != null && result.Diagnostics.HasAnyErrors()) { ReportErrors(result.Diagnostics, consoleOutput, errorLogger); hadErrors = true; } return(new ParsedSource { SyntaxTree = result }); } }
protected string CreateRelativeFilePath(string fullPath) { return(PhpFileUtilities.GetRelativePath( PhpFileUtilities.NormalizeSlashes(fullPath), PhpFileUtilities.NormalizeSlashes(_compilation.Options.BaseDirectory))); }