private void ExecuteSaveBreedCommand(Window window) { if (Thing != null) { World.Instance.Breeds.Remove(Thing.Id); //Temporarily remove old Breed from World } Messages = ErrorVisitor.CheckBreedScriptErrors(Script, World.Instance.ToScope()); if (Messages.Count(message => message.Severity == ErrorSeverity.Error) == 0) { var createdBreed = ExecutionVisitor.BuildBreed(Script, out var executionErrors); if (executionErrors.Count > 0 || createdBreed == null) { Messages = executionErrors; if (createdBreed != null) { World.Instance.Breeds.Remove(createdBreed.Id); //remove newly inserted breed from World } if (Thing != null) { World.Instance.Breeds.Add(Thing.Id, Thing); //Reinsert old breed to World } MessageBox.Show("Failed to save Breed."); } else { Id = createdBreed.Id; type = createdBreed.GetType().Name; Script = createdBreed.Serialize(); SpriteModel = Breeds.MainViewModel.SpriteModels.Items.FirstOrDefault(spriteModel => spriteModel.Id == createdBreed.Model.Id); if (Thing == null) { window.DialogResult = true; } else { foreach (var instance in World.Instance.Instances) { if (instance.Value.Breed == Thing) { instance.Value.Breed = createdBreed; //todo: should update $ID texts in scripts? } } NotifyReferencesOfChange(); } Thing = createdBreed; window.Close(); } } else { if (Thing != null) { World.Instance.Breeds.Add(Thing.Id, Thing); //Reinsert old breed to World } } }
static void PrintFile(FileInfo file) { string fileName = file.FullName; //Console.WriteLine ("parsing {0}", fileName); Parser p = new Parser(); p.Parse (new Lexer (new FileReader (fileName))); if (p.Errors.count == 0) { ErrorVisitor ev = new ErrorVisitor(); ev.Visit(p.compilationUnit, null); } if (p.Errors.count == 0 && errorMode) { Console.WriteLine ("no errors in {0}", file.Name); } else if (p.Errors.count > 0 && !errorMode) { Console.WriteLine ("errors in {0}", file.Name); foreach (ErrorInfo error in p.Errors.ErrorInformation) Console.WriteLine (error.ToString ()); } }
protected override async Task <QuickInfoContent> BuildContentAsync( Document document, SyntaxToken token, CancellationToken cancellationToken) { var linkedDocumentIds = document.GetLinkedDocumentIds(); var modelAndSymbols = await this.BindTokenAsync(document, token, cancellationToken).ConfigureAwait(false); if (modelAndSymbols.Item2.Length == 0 && !linkedDocumentIds.Any()) { return(null); } if (!linkedDocumentIds.Any()) { return(await CreateContentAsync(document.Project.Solution.Workspace, token, modelAndSymbols.Item1, modelAndSymbols.Item2, supportedPlatforms : null, cancellationToken : cancellationToken).ConfigureAwait(false)); } // Linked files/shared projects: imagine the following when GOO is false // #if GOO // int x = 3; // #endif // var y = x$$; // // 'x' will bind as an error type, so we'll show incorrect information. // Instead, we need to find the head in which we get the best binding, // which in this case is the one with no errors. var candidateProjects = new List <ProjectId>() { document.Project.Id }; var invalidProjects = new List <ProjectId>(); var candidateResults = new List <Tuple <DocumentId, SemanticModel, ImmutableArray <ISymbol> > >(); candidateResults.Add(Tuple.Create(document.Id, modelAndSymbols.Item1, modelAndSymbols.Item2)); foreach (var link in linkedDocumentIds) { var linkedDocument = document.Project.Solution.GetDocument(link); var linkedToken = await FindTokenInLinkedDocument(token, document, linkedDocument, cancellationToken).ConfigureAwait(false); if (linkedToken != default) { // Not in an inactive region, so this file is a candidate. candidateProjects.Add(link.ProjectId); var linkedModelAndSymbols = await this.BindTokenAsync(linkedDocument, linkedToken, cancellationToken).ConfigureAwait(false); candidateResults.Add(Tuple.Create(link, linkedModelAndSymbols.Item1, linkedModelAndSymbols.Item2)); } } // Take the first result with no errors. var bestBinding = candidateResults.FirstOrDefault( c => c.Item3.Length > 0 && !ErrorVisitor.ContainsError(c.Item3.FirstOrDefault())); // Every file binds with errors. Take the first candidate, which is from the current file. if (bestBinding == null) { bestBinding = candidateResults.First(); } if (bestBinding.Item3 == null || !bestBinding.Item3.Any()) { return(null); } // We calculate the set of supported projects candidateResults.Remove(bestBinding); foreach (var candidate in candidateResults) { // Does the candidate have anything remotely equivalent? if (!candidate.Item3.Intersect(bestBinding.Item3, LinkedFilesSymbolEquivalenceComparer.Instance).Any()) { invalidProjects.Add(candidate.Item1.ProjectId); } } var supportedPlatforms = new SupportedPlatformData(invalidProjects, candidateProjects, document.Project.Solution.Workspace); return(await CreateContentAsync(document.Project.Solution.Workspace, token, bestBinding.Item2, bestBinding.Item3, supportedPlatforms, cancellationToken).ConfigureAwait(false)); }
public Gtk.Window CreateTooltipWindow(Mono.TextEditor.TextEditor editor, int offset, Gdk.ModifierType modifierState, TooltipItem item) { var doc = IdeApp.Workbench.ActiveDocument; if (doc == null) { return(null); } var titem = (ToolTipData)item.Item; string tooltip = null; if (titem.Result is UnknownIdentifierResolveResult) { tooltip = string.Format("error CS0103: The name `{0}' does not exist in the current context", ((UnknownIdentifierResolveResult)titem.Result).Identifier); } else if (titem.Result is UnknownMemberResolveResult) { var ur = (UnknownMemberResolveResult)titem.Result; if (ur.TargetType.Kind != TypeKind.Unknown) { tooltip = string.Format("error CS0117: `{0}' does not contain a definition for `{1}'", ur.TargetType.FullName, ur.MemberName); } } else if (titem.Result.IsError) { tooltip = "Resolve error."; } else if (titem.Result != null) { var ev = new ErrorVisitor(titem.Resolver); if (titem.Node is AstType && titem.Node.Parent is VariableDeclarationStatement && titem.Node.GetText() == "var") { titem.Node.Parent.AcceptVisitor(ev); } if (ev.ErrorResolveResult != null) { Console.WriteLine(ev.ErrorResolveResult); tooltip = string.Format("Error while resolving: '{0}'", ev.ErrorNode.GetText()); } else { tooltip = CreateTooltip(titem.Result, offset, ambience); } } else { return(null); } if (lastResult != null && lastWindow.IsRealized && titem.Result != null && lastResult.Type.Equals(titem.Result.Type)) { return(lastWindow); } var result = new LanguageItemWindow(tooltip); lastWindow = result; lastResult = titem.Result; if (result.IsEmpty) { return(null); } return(result); }
public Gtk.Window CreateTooltipWindow (Mono.TextEditor.TextEditor editor, int offset, Gdk.ModifierType modifierState, TooltipItem item) { var doc = IdeApp.Workbench.ActiveDocument; if (doc == null) return null; var titem = (ToolTipData)item.Item; string tooltip = null; if (titem.Result is UnknownIdentifierResolveResult) { tooltip = string.Format ("error CS0103: The name `{0}' does not exist in the current context", ((UnknownIdentifierResolveResult)titem.Result).Identifier); } else if (titem.Result is UnknownMemberResolveResult) { var ur = (UnknownMemberResolveResult)titem.Result; if (ur.TargetType.Kind != TypeKind.Unknown) tooltip = string.Format ("error CS0117: `{0}' does not contain a definition for `{1}'", ur.TargetType.FullName, ur.MemberName); } else if (titem.Result.IsError) { tooltip = "Resolve error."; } else if (titem.Result != null) { var ev = new ErrorVisitor (titem.Resolver); if (titem.Node is AstType && titem.Node.Parent is VariableDeclarationStatement && titem.Node.GetText () == "var") { titem.Node.Parent.AcceptVisitor (ev); } if (ev.ErrorResolveResult != null) { Console.WriteLine (ev.ErrorResolveResult); tooltip = string.Format ("Error while resolving: '{0}'", ev.ErrorNode.GetText ()); } else { tooltip = CreateTooltip (titem.Result, offset, ambience); } } else { return null; } if (lastResult != null && lastWindow.IsRealized && titem.Result != null && lastResult.Type.Equals (titem.Result.Type)) return lastWindow; var result = new LanguageItemWindow (tooltip); lastWindow = result; lastResult = titem.Result; if (result.IsEmpty) return null; return result; }