public override object Validate(ParseInfo parseInfo, IExpression value, DocRange valueRange) { StringAction str = value as StringAction; if (str == null) { parseInfo.Script.Diagnostics.Error("Expected string constant.", valueRange); } return(str?.Value); }
public override object Validate(ParseInfo parseInfo, IExpression value, DocRange valueRange) { StringAction str = value as StringAction; if (str == null) { parseInfo.Script.Diagnostics.Error("Expected string constant.", valueRange); return(null); } string resultingPath = Extras.CombinePathWithDotNotation(parseInfo.Script.Uri.FilePath(), str.Value); if (resultingPath == null) { parseInfo.Script.Diagnostics.Error("File path contains invalid characters.", valueRange); return(null); } string dir = Path.GetDirectoryName(resultingPath); if (Directory.Exists(dir)) { Importer.AddImportCompletion(parseInfo.Script, dir, valueRange); } if (!File.Exists(resultingPath)) { parseInfo.Script.Diagnostics.Error($"No file was found at '{resultingPath}'.", valueRange); return(null); } if (FileTypes != null && !FileTypes.Contains(Path.GetExtension(resultingPath).ToLower())) { parseInfo.Script.Diagnostics.Error($"Expected a file with the file type '{string.Join(", ", FileTypes)}'.", valueRange); return(null); } parseInfo.Script.AddDefinitionLink(valueRange, new Location(Extras.Definition(resultingPath), DocRange.Zero)); parseInfo.Script.AddHover(valueRange, resultingPath); return(resultingPath); }
public override object Validate(ScriptFile script, IExpression value, DocRange valueRange) { StringAction str = value as StringAction; if (str == null) { script.Diagnostics.Error("Expected string constant.", valueRange); return(null); } string resultingPath = Extras.CombinePathWithDotNotation(script.Uri.FilePath(), str.Value); if (resultingPath == null) { script.Diagnostics.Error("File path contains invalid characters.", valueRange); return(null); } string dir = Path.GetDirectoryName(resultingPath); if (Directory.Exists(dir)) { DeltinScript.AddImportCompletion(script, dir, valueRange); } if (!File.Exists(resultingPath)) { script.Diagnostics.Error($"No file was found at '{resultingPath}'.", valueRange); return(null); } if (FileType != null && Path.GetExtension(resultingPath).ToLower() != "." + FileType) { script.Diagnostics.Error($"Expected a file with the file type '{FileType}'.", valueRange); return(null); } return(resultingPath); }
public void Dispose() { StringAction.RemoveUnused(Strings); }