Esempio n. 1
0
        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
                }
            }
        }
Esempio n. 2
0
    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 ());
        }
    }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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;
		}