コード例 #1
0
        public override bool OnCompletionInsert(ScintillaNet.ScintillaControl sci, int position, string text, char trigger)
        {
            if (text == "Vector")
            {
                string insert = null;
                string line   = sci.GetLine(sci.LineFromPosition(position));
                Match  m      = Regex.Match(line, @"\svar\s+(?<varname>.+)\s*:\s*Vector\.<(?<indextype>.+)(?=(>\s*=))");
                if (m.Success)
                {
                    insert = String.Format(".<{0}>", m.Groups["indextype"].Value);
                }
                else
                {
                    m = Regex.Match(line, @"\s*=\s*new");
                    if (m.Success)
                    {
                        ASResult result = ASComplete.GetExpressionType(sci, sci.PositionFromLine(sci.LineFromPosition(position)) + m.Index);
                        if (result != null && !result.IsNull() && result.Member != null && result.Member.Type != null)
                        {
                            m = Regex.Match(result.Member.Type, @"(?<=<).+(?=>)");
                            if (m.Success)
                            {
                                insert = String.Format(".<{0}>", m.Value);
                            }
                        }
                    }
                    if (insert == null)
                    {
                        if (trigger == '.' || trigger == '(')
                        {
                            return(true);
                        }
                        insert = ".<>";
                        sci.InsertText(position + text.Length, insert);
                        sci.CurrentPos = position + text.Length + 2;
                        sci.SetSel(sci.CurrentPos, sci.CurrentPos);
                        ASComplete.HandleAllClassesCompletion(sci, "", false, true);
                        return(true);
                    }
                }
                if (insert == null)
                {
                    return(false);
                }
                if (trigger == '.')
                {
                    sci.InsertText(position + text.Length, insert.Substring(1));
                    sci.CurrentPos = position + text.Length;
                }
                else
                {
                    sci.InsertText(position + text.Length, insert);
                    sci.CurrentPos = position + text.Length + insert.Length;
                }
                sci.SetSel(sci.CurrentPos, sci.CurrentPos);
                return(true);
            }

            return(false);
        }
コード例 #2
0
        public new ASResult GetVarOfForeachStatement(ScintillaControl sci, int startPosition)
        {
            var result         = new ASResult();
            var parCount       = 0;
            var characterClass = ScintillaControl.Configuration.GetLanguage(sci.ConfigurationLanguage).characterclass.Characters;
            var endPosition    = sci.TextLength;
            var pos            = startPosition;

            while (pos < endPosition)
            {
                if (!sci.PositionIsOnComment(pos))
                {
                    var c = (char)sci.CharAt(pos);
                    if (c > ' ')
                    {
                        if (parCount == 0 && c == '(')
                        {
                            parCount++;
                        }
                        else if (parCount == 1 && characterClass.IndexOf(c) != -1)
                        {
                            pos    = sci.WordEndPosition(pos, true);
                            result = ASComplete.GetExpressionType(sci, pos);
                            break;
                        }
                    }
                }
                pos++;
            }
            return(result);
        }
コード例 #3
0
        private void OnMouseHover(ScintillaNet.ScintillaControl sci, int position)
        {
            if (ASContext.Locked || !ASContext.Context.IsFileValid())
            {
                return;
            }

            // get word at mouse position
            int style = sci.BaseStyleAt(position);

            DebugConsole.Trace("Style=" + style);
            if (!ASComplete.IsTextStyle(style))
            {
                return;
            }
            position = sci.WordEndPosition(position, true);
            ASResult result = ASComplete.GetExpressionType(sci, position);

            // set tooltip
            if (!result.IsNull())
            {
                string text = ASComplete.GetToolTipText(result);
                DebugConsole.Trace("SHOW " + text);
                if (text == null)
                {
                    return;
                }
                // show tooltip
                InfoTip.ShowAtMouseLocation(text);
            }
        }
コード例 #4
0
        private void ProcessMouseMove(Point point)
        {
            int position = sciControl.PositionFromPointClose(point.X, point.Y);

            if (position < 0)
            {
                SetCurrentWord(null);
                return;
            }

            if (ASContext.Context.IsFileValid)
            {
                Word word = new Word();
                word.StartPos = sciControl.WordStartPosition(position, true);
                word.EndPos   = sciControl.WordEndPosition(position, true);

                ASResult result = ASComplete.GetExpressionType(sciControl, word.EndPos);
                if (!result.IsNull())
                {
                    SetCurrentWord(word);
                }
                else
                {
                    SetCurrentWord(null);
                }
            }
        }
コード例 #5
0
 /// <summary>
 /// Display completion list or calltip info
 /// </summary>
 private void OnChar(ScintillaNet.ScintillaControl Sci, int Value)
 {
     if (Sci.Lexer == 3 || Sci.Lexer == 4)
     {
         ASComplete.OnChar(Sci, Value, true);
     }
 }
コード例 #6
0
        private void ContextChanged()
        {
            ITabbedDocument doc     = PluginBase.MainForm.CurrentDocument;
            bool            isValid = false;

            if (doc.IsEditable)
            {
                ScintillaNet.ScintillaControl sci = ASContext.CurSciControl;
                if (currentDoc == doc.FileName && sci != null)
                {
                    int line = sci.LineFromPosition(currentPos);
                    ASContext.SetCurrentLine(line);
                }
                else
                {
                    ASComplete.CurrentResolvedContext = null;  // force update
                }
                isValid = ASContext.Context.IsFileValid;
                if (isValid)
                {
                    ASComplete.ResolveContext(sci);
                }
            }
            else
            {
                ASComplete.ResolveContext(null);
            }

            bool enableItems = isValid && !doc.IsUntitled;

            pluginUI.OutlineTree.Enabled = ASContext.Context.CurrentModel != null;
            SetItemsEnabled(enableItems, ASContext.Context.CanBuild);
        }
コード例 #7
0
        private bool OpenVirtualFileModel(string virtualPath)
        {
            int p = virtualPath.IndexOf("::");

            if (p < 0)
            {
                return(false);
            }

            string container = virtualPath.Substring(0, p);
            string ext       = Path.GetExtension(container).ToLower();

            if (ext != ".loomlib")
            {
                return(false);
            }
            if (!File.Exists(container))
            {
                return(false);
            }

            string    fileName = Path.Combine(container, virtualPath.Substring(p + 2).Replace('.', Path.DirectorySeparatorChar));
            PathModel path     = new PathModel(container, contextInstance);

            if (path.HasFile(fileName))
            {
                FileModel model = path.GetFile(fileName);
                ASComplete.OpenVirtualFile(model);
                return(true);
            }
            return(false);
        }
コード例 #8
0
        private void OnMouseHover(ScintillaNet.ScintillaControl sci, int position)
        {
            if (!ASContext.Context.IsFileValid)
            {
                return;
            }

            lastHoverPosition = position;

            // get word at mouse position
            int style = sci.BaseStyleAt(position);

            if (!ASComplete.IsTextStyle(style))
            {
                return;
            }
            position = sci.WordEndPosition(position, true);
            ASResult result = ASComplete.GetExpressionType(sci, position);

            // set tooltip
            if (!result.IsNull())
            {
                string text = ASComplete.GetToolTipText(result);
                if (text == null)
                {
                    return;
                }
                // show tooltip
                UITools.Tip.ShowAtMouseLocation(text);
            }
        }
コード例 #9
0
        public void ResolveDotContext_issue750(string sourceText, MemberModel code)
        {
            ((HaXeSettings)ASContext.Context.Settings).CompletionMode = HaxeCompletionModeEnum.FlashDevelop;
            SetSrc(sci, sourceText);
            var expr = ASComplete.GetExpression(sci, sci.CurrentPos);
            var list = ASContext.Context.ResolveDotContext(sci, expr, false);

            if (code == null)
            {
                Assert.IsNull(list);
            }
            else
            {
                var members = ASContext.Context.ResolveType(ASContext.Context.Features.stringKey, ASContext.Context.CurrentModel)
                              .Members.Items.Where(it => !it.Flags.HasFlag(FlagType.Static) && it.Access.HasFlag(Visibility.Public))
                              .ToArray();
                var expectedList = new MemberList();
                foreach (var member in members)
                {
                    expectedList.Add(member);
                }
                expectedList.Add(code);
                expectedList.Sort();
                Assert.AreEqual(expectedList, list);
            }
        }
コード例 #10
0
        public virtual ASResult GetCollectionOfForeachStatement(ScintillaControl sci, int startPosition)
        {
            var result      = new ASResult();
            var parCount    = 0;
            var endPosition = sci.TextLength;
            var pos         = startPosition;

            while (pos < endPosition)
            {
                if (!sci.PositionIsOnComment(pos))
                {
                    var c = (char)sci.CharAt(pos);
                    if (c > ' ')
                    {
                        if (c == '(')
                        {
                            parCount++;
                        }
                        else if (c == ')')
                        {
                            parCount--;
                            if (parCount == 0)
                            {
                                result = ASComplete.GetExpressionType(sci, pos);
                                break;
                            }
                        }
                    }
                }
                pos++;
            }
            return(result);
        }
コード例 #11
0
        bool OpenVirtualFileModel(string virtualPath)
        {
            var p = virtualPath.IndexOfOrdinal("::");

            if (p < 0)
            {
                return(false);
            }
            var container = virtualPath.Substring(0, p);

            if (!File.Exists(container))
            {
                return(false);
            }
            var ext = Path.GetExtension(container).ToLower();

            if (ext == ".swf" || ext == ".swc")
            {
                var fileName = Path.Combine(container, virtualPath.Substring(p + 2).Replace('.', Path.DirectorySeparatorChar));
                var path     = new PathModel(container, contextInstance);
                var parser   = new ContentParser(path.Path);
                parser.Run();
                AbcConverter.Convert(parser, path, contextInstance);
                if (!path.HasFile(fileName))
                {
                    return(false);
                }
                var model = path.GetFile(fileName);
                ASComplete.OpenVirtualFile(model);
                return(true);
            }
            return(false);
        }
コード例 #12
0
        void ProcessMouseMove(Point point)
        {
            int position = sci.PositionFromPointClose(point.X, point.Y);

            if (position < 0)
            {
                SetCurrentWord(null);
            }
            else if (ASContext.Context.IsFileValid)
            {
                Word word = new Word
                {
                    StartPos = sci.WordStartPosition(position, true),
                    EndPos   = sci.WordEndPosition(position, true)
                };
                ASResult expr = ASComplete.GetExpressionType(sci, word.EndPos);
                if (expr.IsNull())
                {
                    string overrideKey = ASContext.Context.Features.overrideKey;
                    if (expr.Context == null || !expr.Context.BeforeBody || string.IsNullOrEmpty(overrideKey) || sci.GetWordFromPosition(position) != overrideKey)
                    {
                        word = null;
                    }
                }
                SetCurrentWord(word);
            }
        }
コード例 #13
0
ファイル: PluginMain.cs プロジェクト: tienery/flashdevelop
 private void OnUpdateCallTip(ScintillaNet.ScintillaControl sci, int position)
 {
     if (ASComplete.HasCalltip())
     {
         ASComplete.HandleFunctionCompletion(sci, false, true);
     }
 }
コード例 #14
0
        /// <summary>
        /// Open a file in the classpath (physical or virtual) or a specific context
        /// </summary>
        public FileModel OpenFile(string filename, IASContext context)
        {
            if (context == null || context.Classpath == null)
            {
                return(null);
            }
            FileModel model = null;

            foreach (PathModel aPath in context.Classpath)
            {
                if (aPath.HasFile(filename))
                {
                    model = aPath.GetFile(filename);
                    break;
                }
            }
            if (model != null)
            {
                if (File.Exists(model.FileName))
                {
                    ASContext.MainForm.OpenEditableDocument(model.FileName, false);
                }
                else
                {
                    ASComplete.OpenVirtualFile(model);
                    model = ASContext.Context.CurrentModel;
                }
            }
            return(model);
        }
コード例 #15
0
 /// <summary>
 /// Display completion list or calltip info
 /// </summary>
 private void OnChar(ScintillaNet.ScintillaControl Sci, int Value)
 {
     DebugConsole.Trace(Value);
     if (Sci.Lexer == 3)
     {
         ASComplete.OnChar(Sci, Value, true);
     }
 }
コード例 #16
0
            public void SimpleTest()
            {
                //TODO: Improve this test with more checks!
                var pluginMain   = Substitute.For <PluginMain>();
                var pluginUiMock = new PluginUIMock(pluginMain);

                pluginMain.MenuItems.Returns(new List <System.Windows.Forms.ToolStripItem>());
                pluginMain.Settings.Returns(new GeneralSettings());
                pluginMain.Panel.Returns(pluginUiMock);
                ASContext.GlobalInit(pluginMain);
                ASContext.Context             = Substitute.For <IASContext>();
                ASContext.Context.CurrentLine = 9;
                var asContext = new AS3Context.Context(new AS3Settings());

                ASContext.Context.Features.Returns(asContext.Features);
                ASContext.Context.GetCodeModel(null).ReturnsForAnyArgs(x => asContext.GetCodeModel(x.ArgAt <string>(0)));

                // Maybe we want to get the filemodel from ASFileParser even if we won't get a controlled environment?
                var member = new MemberModel("test1", "void", FlagType.Function, Visibility.Public)
                {
                    LineFrom   = 4,
                    LineTo     = 10,
                    Parameters = new List <MemberModel>
                    {
                        new MemberModel("arg1", "String", FlagType.ParameterVar, Visibility.Default),
                        new MemberModel("arg2", "Boolean", FlagType.ParameterVar, Visibility.Default)
                        {
                            Value = "false"
                        }
                    }
                };

                var classModel = new ClassModel();

                classModel.Name = "ASCompleteTest";
                classModel.Members.Add(member);

                var fileModel = new FileModel();

                fileModel.Classes.Add(classModel);

                classModel.InFile = fileModel;

                ASContext.Context.CurrentModel.Returns(fileModel);
                ASContext.Context.CurrentClass.Returns(classModel);
                ASContext.Context.CurrentMember.Returns(member);

                var sci = GetBaseScintillaControl();

                sci.Text = TestFile.ReadAllText("ASCompletion.Test_Files.completion.as3.SimpleTest.as");
                sci.ConfigurationLanguage = "as3";
                sci.Colourise(0, -1);

                var result = ASComplete.GetExpressionType(sci, 185);

                Assert.True(result.Context != null && result.Context.LocalVars != null);
                Assert.AreEqual(4, result.Context.LocalVars.Count);
            }
コード例 #17
0
        /// <summary>
        /// Retrieves the refactoring target based on the current location.
        /// Note that this will look up to the declaration source.
        /// This allows users to execute the rename from a reference to the source rather than having to navigate to the source first.
        /// </summary>
        public static ASResult GetDefaultRefactorTarget()
        {
            ScintillaControl sci = PluginBase.MainForm.CurrentDocument.SciControl;

            if (!ASContext.Context.IsFileValid || (sci == null))
            {
                return(null);
            }
            int position = sci.WordEndPosition(sci.CurrentPos, true);

            return(ASComplete.GetExpressionType(sci, position));
        }
コード例 #18
0
        private bool OpenVirtualFileModel(string virtualPath)
        {
            int p = virtualPath.IndexOf("::");

            if (p < 0)
            {
                return(false);
            }

            string container = virtualPath.Substring(0, p);
            string ext       = Path.GetExtension(container).ToLower();

            if (ext != ".swf" && ext != ".swc" && ext != ".ane")
            {
                return(false);
            }
            if (!File.Exists(container))
            {
                return(false);
            }

            string        fileName = Path.Combine(container, virtualPath.Substring(p + 2).Replace('.', Path.DirectorySeparatorChar));
            PathModel     path     = new PathModel(container, contextInstance);
            ContentParser parser   = new ContentParser(path.Path);

            parser.Run();
            AbcConverter.Convert(parser, path, contextInstance);

            if (path.HasFile(fileName))
            {
                FileModel model = path.GetFile(fileName);
                ASComplete.OpenVirtualFile(model);
                return(true);
            }
            int split = fileName.LastIndexOf(Path.DirectorySeparatorChar) + 1;

            fileName = fileName.Substring(0, split) + "package.as";
            if (path.HasFile(fileName))
            {
                FileModel model = path.GetFile(fileName);
                ASComplete.OpenVirtualFile(model);
                return(true);
            }
            fileName = fileName.Substring(0, split) + "toplevel.as";
            if (path.HasFile(fileName))
            {
                FileModel model = path.GetFile(fileName);
                ASComplete.OpenVirtualFile(model);
                return(true);
            }
            return(false);
        }
コード例 #19
0
        private static List <ICompletionListItem> GetAutoCompletionValuesFromType(string type)
        {
            if (type == "Boolean")
            {
                return(new List <ICompletionListItem>()
                {
                    new HtmlAttributeItem("true"),
                    new HtmlAttributeItem("false")
                });
            }
            else if (type == "Class")
            {
                ASComplete.HandleAllClassesCompletion(PluginBase.MainForm.CurrentDocument.SciControl, tokenContext,
                                                      true, false);
            }
            else if (type == "Function")
            {
                ClassModel tmpClass = mxmlContext.model.GetPublicClass();
                Visibility acc      = Visibility.Default | Visibility.Internal | Visibility.Private | Visibility.Protected | Visibility.Public;

                tmpClass.ResolveExtends();

                List <ICompletionListItem> result = null;
                var validTypes = new Dictionary <string, bool>();
                while (tmpClass != null && !tmpClass.IsVoid())
                {
                    foreach (MemberModel member in tmpClass.Members)
                    {
                        if ((member.Flags & FlagType.Function) > 0 && (member.Access & acc) > 0)
                        {
                            if (result == null)
                            {
                                result = new List <ICompletionListItem>();
                            }
                            result.Add(new MemberItem(member));
                        }
                    }

                    tmpClass = tmpClass.Extends;
                    if (tmpClass != null && tmpClass.InFile.Package == "" && tmpClass.Name == "Object")
                    {
                        break;
                    }
                    // members visibility
                    // TODO: Take into account namespaces!
                    acc = Visibility.Protected | Visibility.Public;
                }

                return(result);
            }
            return(null);
        }
コード例 #20
0
        /// <summary>
        /// Gets the result for menu updating from current position.
        /// </summary>
        private ASResult GetResultFromCurrentPosition()
        {
            ITabbedDocument document = PluginBase.MainForm.CurrentDocument;

            if (document == null || document.SciControl == null || !ASContext.Context.IsFileValid)
            {
                return(null);
            }
            Int32    position = document.SciControl.WordEndPosition(document.SciControl.CurrentPos, true);
            ASResult result   = ASComplete.GetExpressionType(document.SciControl, position);

            return(result == null && result.IsNull() ? null : result);
        }
        protected override string GetSnippetVar(ScintillaControl sci, EForeach expr)
        {
            var result = TemplateUtils.GetTemplate("AssignVariable");

            result = TemplateUtils.ReplaceTemplateVariable(result, "Name", expr.Variable.Context.Value);
            result = TemplateUtils.ReplaceTemplateVariable(result, "Type", GetVariableType(expr));
            result = TemplateUtils.ReplaceTemplateVariable(result, "EntryPoint", string.Empty);
            var context  = (ASComplete.CurrentResolvedContext.Result ?? new ASResult()).Context;
            var iterator = ASComplete.FindFreeIterator(ASContext.Context, ASContext.Context.CurrentClass, context);

            result += $"{expr.Collection.Member.Name}.get({iterator});";
            return(result);
        }
コード例 #22
0
        /// <summary>
        /// Display completion list or calltip info
        /// </summary>
        private void OnChar(ScintillaNet.ScintillaControl Sci, int Value)
        {
            if (ASContext.Locked)
            {
                return;
            }

            DebugConsole.Trace(Value);
            if (Sci.Lexer == 3)
            {
                ASComplete.OnChar(Sci, Value, true);
            }
        }
コード例 #23
0
 private void OnUpdateCallTip(ScintillaNet.ScintillaControl sci, int position)
 {
     if (ASComplete.HasCalltip())
     {
         int  pos = sci.CurrentPos - 1;
         char c   = (char)sci.CharAt(pos);
         if ((c == ',' || c == '(') && sci.BaseStyleAt(pos) == 0)
         {
             sci.Colourise(0, -1);
         }
         ASComplete.HandleFunctionCompletion(sci, false, true);
     }
 }
コード例 #24
0
            public ComaExpression Haxe(string text)
            {
                ASContext.Context = new HaXeContext.Context(new HaXeSettings());

                var sci = GetBaseScintillaControl();

                sci.Text = text;
                sci.ConfigurationLanguage = "haxe";

                var coma = ASComplete.DisambiguateComa(sci, text.Length, 0);

                return(coma);
            }
コード例 #25
0
ファイル: ReferenceList.cs プロジェクト: zvoronz/flashdevelop
        static void ListView_DoubleClick(object sender, EventArgs e)
        {
            var selection = listView.Items[listView.SelectedIndices[0]];
            var reference = (Reference)selection.Tag;

            HideList();
            if (PluginBase.MainForm.CurrentDocument.SciControl != null)
            {
                ASComplete.SaveLastLookupPosition(PluginBase.MainForm.CurrentDocument.SciControl);
            }
            PluginBase.MainForm.OpenEditableDocument(reference.File, false);
            PluginBase.MainForm.CurrentDocument.SciControl.GotoLine(reference.Line);
        }
コード例 #26
0
        static private void CompleteTemplate(string Context)
        {
            // get indentation
            ScintillaNet.ScintillaControl Sci = ASContext.CurSciControl;
            if (Sci == null)
            {
                return;
            }
            int    position = Sci.CurrentPos;
            int    line     = Sci.LineFromPosition(position);
            int    indent   = Sci.LineIndentPosition(line) - Sci.PositionFromLine(line);
            string tab      = Sci.GetLine(line).Substring(0, indent);
            // get EOL
            int    eolMode = Sci.EOLMode;
            string newline = ASComplete.GetNewLineMarker(eolMode);
            string star    = PluginBase.Settings.CommentBlockStyle == CommentBlockStyle.Indented ? " *" : "*";

            // empty box
            if (Context == null)
            {
                Sci.ReplaceSel(newline + tab + star + " " + newline + tab + star + "/");
                position += newline.Length + tab.Length + 1 + star.Length;
                Sci.SetSel(position, position);
            }

            // method details
            else
            {
                string box  = newline + tab + star + " ";
                Match  mFun = re_splitFunction.Match(Context);
                if (mFun.Success && !re_property.IsMatch(mFun.Groups["fname"].Value))
                {
                    // parameters
                    MemberList list = ParseMethodParameters(mFun.Groups["params"].Value);
                    foreach (MemberModel param in list)
                    {
                        box += newline + tab + star + " @param\t" + param.Name;
                    }
                    // return type
                    Match mType = re_variableType.Match(mFun.Groups["type"].Value);
                    if (mType.Success && !mType.Groups["type"].Value.Equals("void", StringComparison.OrdinalIgnoreCase))
                    {
                        box += newline + tab + star + " @return"; //+mType.Groups["type"].Value;
                    }
                }
                box += newline + tab + star + "/";
                Sci.ReplaceSel(box);
                position += newline.Length + tab.Length + 1 + star.Length;
                Sci.SetSel(position, position);
            }
        }
コード例 #27
0
ファイル: SaveAsClass.cs プロジェクト: Dsnoi/flashdevelopjp
    public static void Execute()
    {
        if (Globals.SciControl == null)
        {
            return;
        }
        ScintillaControl sci = Globals.SciControl;

        //Project project = (Project) PluginBase.CurrentProject;
        //if (project == null) return;

        MainForm mainForm = (MainForm)Globals.MainForm;

        ITabbedDocument document = mainForm.CurrentDocument;

        String    dir     = Path.GetDirectoryName(document.FileName);
        Hashtable details = ASComplete.ResolveElement(sci, null);

        IASContext context = ASContext.Context;
        ClassModel cClass  = context.CurrentClass;
        string     package = context.CurrentModel.Package;

        sci.BeginUndoAction();

        if (sci.SelText == "")
        {
            sci.SelectionStart = sci.PositionFromLine(cClass.LineFrom);
            sci.SelectionEnd   = sci.PositionFromLine(cClass.LineTo + 1);
        }

        String content = Regex.Replace(
            sci.SelText,
            @"^",
            "\t",
            RegexOptions.Multiline);

        String contents = "package " + package + " {\n" + content + "\n}";

        TraceManager.Add(contents);
        //TraceManager.Add(cClass.LineTo.ToString());

        Encoding encoding = sci.Encoding;
        String   file     = dir + "\\" + cClass.Name + ".as";

        FileHelper.WriteFile(file, contents, encoding);

        sci.Clear();
        sci.EndUndoAction();
    }
コード例 #28
0
ファイル: Context2.cs プロジェクト: mryp/kkefz
        public override void ResolveTopLevelElement(string token, ASResult result)
        {
            if (topLevel != null && topLevel.Members.Count > 0)
            {
                // current class
                ClassModel inClass = ASContext.Context.CurrentClass;
                if (token == "this")
                {
                    result.Member = topLevel.Members.Search("this", 0, 0);
                    if (inClass.IsVoid())
                    {
                        inClass = ASContext.Context.ResolveType(result.Member.Type, null);
                    }
                    result.Type   = inClass;
                    result.InFile = ASContext.Context.CurrentModel;
                    return;
                }
                else if (token == "super")
                {
                    if (inClass.IsVoid())
                    {
                        MemberModel thisMember = topLevel.Members.Search("this", 0, 0);
                        inClass = ASContext.Context.ResolveType(thisMember.Type, null);
                    }
                    inClass.ResolveExtends();
                    ClassModel extends = inClass.Extends;
                    if (!extends.IsVoid())
                    {
                        result.Member = topLevel.Members.Search("super", 0, 0);
                        result.Type   = extends;
                        result.InFile = extends.InFile;
                        return;
                    }
                }
                else if (token == "global")
                {
                    return;
                }

                // other top-level elements
                ASComplete.FindMember(token, topLevel, result, 0, 0);
                if (!result.IsNull())
                {
                    return;
                }
            }
        }
コード例 #29
0
        static void RenameMember(ClassModel inClass, string name, string newName, bool outputResults)
        {
            MemberModel m = inClass.Members.Items.FirstOrDefault(it => it.Name == name);

            if (m == null)
            {
                return;
            }
            ASResult result = new ASResult();

            ASComplete.FindMember(name, inClass, result, FlagType.Dynamic | FlagType.Function, 0);
            if (result.Member == null)
            {
                return;
            }
            queue.Add(new Rename(result, outputResults, newName));
        }
コード例 #30
0
 private static List <ICompletionListItem> GetAutoCompletionValuesFromType(string type)
 {
     if (type == "Boolean")
     {
         return(new List <ICompletionListItem>()
         {
             new HtmlAttributeItem("true"),
             new HtmlAttributeItem("false")
         });
     }
     else if (type == "Class")
     {
         ASComplete.HandleAllClassesCompletion(PluginBase.MainForm.CurrentDocument.SciControl, tokenContext,
                                               true, false);
     }
     return(null);
 }