Esempio n. 1
0
        public void RemovedFromProject()
        {
            lock (this) {
                AnalysisVersion = -1;

                var state = ProjectState;
                foreach (var aggregatedInto in _aggregates)
                {
                    if (aggregatedInto != null && aggregatedInto.AnalysisVersion != -1)
                    {
                        state?.ClearAggregate(aggregatedInto);
                        aggregatedInto.RemovedFromProject();
                    }
                }

                while (_backReferences.TryDequeue(out var reference))
                {
                    if (reference.TryGetTarget(out var referenceDict))
                    {
                        lock (referenceDict) {
                            referenceDict.Remove(this);
                        }
                    }
                }

                foreach (var moduleReference in MyScope.ModuleReferences.ToList())
                {
                    MyScope.RemoveModuleReference(moduleReference);
                }
            }
        }
Esempio n. 2
0
 private void ClearScope()
 {
     MyScope.Scope.Children.Clear();
     MyScope.Scope.ClearNodeScopes();
     MyScope.Scope.ClearNodeValues();
     MyScope.ClearUnresolvedModules();
 }
Esempio n. 3
0
        public void Dispose()
        {
            lock (this) {
                AnalysisVersion = -1;

                var state = ProjectState;
                foreach (var aggregatedInto in _aggregates)
                {
                    if (aggregatedInto != null && aggregatedInto.AnalysisVersion != -1)
                    {
                        state?.ClearAggregate(aggregatedInto);
                        aggregatedInto.RemovedFromProject();
                    }
                }

                while (_backReferences.TryDequeue(out var reference))
                {
                    if (reference.TryGetTarget(out var referenceDict))
                    {
                        lock (referenceDict) {
                            referenceDict.Remove(this);
                        }
                    }
                }

                MyScope.ClearReferencedModules();
                NewParseTree -= NewParseTree;
                NewAnalysis  -= NewAnalysis;
            }
        }
Esempio n. 4
0
 public static MyScope Getscpoe()
 {
     if (myscope == null)
     {
         myscope = new MyScope();
     }
     return(myscope);
 }
Esempio n. 5
0
        private void Parse(bool enqueOnly, CancellationToken cancel)
        {
            JsAst           tree;
            IAnalysisCookie cookie;

            GetTreeAndCookie(out tree, out cookie);
            if (tree == null)
            {
                return;
            }

            if (String.Equals(Path.GetFileName(FilePath), "gruntfile.js", StringComparison.OrdinalIgnoreCase))
            {
                _unit = new GruntfileAnalysisUnit(tree, EnvironmentRecord);
            }
            else
            {
                _unit = new AnalysisUnit(tree, EnvironmentRecord);
            }
            _moduleDeps.EnqueueDependents();

            if (EnvironmentRecord.HasChildren)
            {
                EnvironmentRecord.Children.Clear();
            }
            EnvironmentRecord.ClearNodeEnvironments();
            EnvironmentRecord.ClearNodeValues();
#if FALSE
            MyScope.ClearUnresolvedModules();
#endif
            foreach (var wrapper in _proxies)
            {
                wrapper.NewVersion();
            }
            _proxies.Clear();

            _unit.Enqueue();

            InitNodejsVariables();

            // collect top-level definitions first
            var walker = new OverviewWalker(this, _unit, tree);
            tree.Walk(walker);


            if (!enqueOnly)
            {
                _analyzer.AnalyzeQueuedEntries(cancel);
            }

            // publish the analysis now that it's complete
            _currentAnalysis = new ModuleAnalysis(
                _unit,
                ((ModuleEnvironmentRecord)_unit.Environment).CloneForPublish(),
                cookie);
        }
Esempio n. 6
0
        private void Parse(bool enqueueOnly, CancellationToken cancel)
        {
            PythonAst       tree;
            IAnalysisCookie cookie;

            GetTreeAndCookie(out tree, out cookie);
            if (tree == null)
            {
                return;
            }

            var oldParent = _myScope.ParentPackage;

            if (_filePath != null)
            {
                ProjectState.ModulesByFilename[_filePath] = _myScope;
            }

            if (oldParent != null)
            {
                // update us in our parent package
                oldParent.AddChildPackage(_myScope, _unit);
            }
            else if (_filePath != null)
            {
                // we need to check and see if our parent is a package for the case where we're adding a new
                // file but not re-analyzing our parent package.
                string parentFilename;
                if (ModulePath.IsInitPyFile(_filePath))
                {
                    // subpackage
                    parentFilename = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(_filePath)), "__init__.py");
                }
                else
                {
                    // just a module
                    parentFilename = Path.Combine(Path.GetDirectoryName(_filePath), "__init__.py");
                }

                ModuleInfo parentPackage;
                if (ProjectState.ModulesByFilename.TryGetValue(parentFilename, out parentPackage))
                {
                    parentPackage.AddChildPackage(_myScope, _unit);
                }
            }

            _unit = new AnalysisUnit(tree, _myScope.Scope);
            AnalysisLog.NewUnit(_unit);

            foreach (var value in MyScope.Scope.AllVariables)
            {
                value.Value.EnqueueDependents();
            }

            MyScope.Scope.Children.Clear();
            MyScope.Scope.ClearNodeScopes();
            MyScope.Scope.ClearNodeValues();
            MyScope.ClearUnresolvedModules();

            // collect top-level definitions first
            var walker = new OverviewWalker(this, _unit, tree);

            tree.Walk(walker);

            _myScope.Specialize();

            // It may be that we have analyzed some child packages of this package already, but because it wasn't analyzed,
            // the children were not registered. To handle this possibility, scan analyzed packages for children of this
            // package (checked by module name first, then sanity-checked by path), and register any that match.
            if (ModulePath.IsInitPyFile(_filePath))
            {
                string pathPrefix = Path.GetDirectoryName(_filePath) + "\\";
                var    children   =
                    from pair in _projectState.ModulesByFilename
                    // Is the candidate child package in a subdirectory of our package?
                    let fileName = pair.Key
                                   where fileName.StartsWith(pathPrefix)
                                   let moduleName = pair.Value.Name
                                                    // Is the full name of the candidate child package qualified with the name of our package?
                                                    let lastDot = moduleName.LastIndexOf('.')
                                                                  where lastDot > 0
                                                                  let parentModuleName = moduleName.Substring(0, lastDot)
                                                                                         where parentModuleName == _myScope.Name
                                                                                         select pair.Value;
                foreach (var child in children)
                {
                    _myScope.AddChildPackage(child, _unit);
                }
            }

            _unit.Enqueue();

            if (!enqueueOnly)
            {
                _projectState.AnalyzeQueuedEntries(cancel);
            }

            // publish the analysis now that it's complete/running
            _currentAnalysis = new ModuleAnalysis(
                _unit,
                ((ModuleScope)_unit.Scope).CloneForPublish()
                );
        }
Esempio n. 7
0
        private void Parse(bool enqueueOnly, CancellationToken cancel)
        {
#if DEBUG
            Debug.Assert(Monitor.IsEntered(this));
#endif
            var parse  = GetCurrentParse();
            var tree   = parse?.Tree;
            var cookie = parse?.Cookie;
            if (tree == null)
            {
                return;
            }

            var oldParent = MyScope.ParentPackage;
            if (FilePath != null)
            {
                ProjectState.ModulesByFilename[FilePath] = MyScope;
            }

            if (oldParent != null)
            {
                // update us in our parent package
                oldParent.AddChildPackage(MyScope, _unit);
            }
            else if (FilePath != null)
            {
                // we need to check and see if our parent is a package for the case where we're adding a new
                // file but not re-analyzing our parent package.
                string parentFilename;
                if (ModulePath.IsInitPyFile(FilePath))
                {
                    // subpackage
                    parentFilename = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(FilePath)), "__init__.py");
                }
                else
                {
                    // just a module
                    parentFilename = Path.Combine(Path.GetDirectoryName(FilePath), "__init__.py");
                }

                if (ProjectState.ModulesByFilename.TryGetValue(parentFilename, out var parentPackage))
                {
                    parentPackage.AddChildPackage(MyScope, _unit);
                }
            }

            _unit = new AnalysisUnit(tree, MyScope.Scope);
            AnalysisLog.NewUnit(_unit);

            MyScope.Scope.Children = new List <InterpreterScope>();
            MyScope.Scope.ClearNodeScopes();
            MyScope.Scope.ClearNodeValues();
            MyScope.Scope.ClearLinkedVariables();
            MyScope.Scope.ClearVariables();
            MyScope.ClearReferencedModules();
            MyScope.ClearUnresolvedModules();
            _unit.State.ClearDiagnostics(this);

            MyScope.EnsureModuleVariables(_unit.State);

            foreach (var value in MyScope.Scope.AllVariables)
            {
                value.Value.EnqueueDependents();
            }

            // collect top-level definitions first
            var walker = new OverviewWalker(this, _unit, tree);
            tree.Walk(walker);

            MyScope.Specialize();

            // It may be that we have analyzed some child packages of this package already, but because it wasn't analyzed,
            // the children were not registered. To handle this possibility, scan analyzed packages for children of this
            // package (checked by module name first, then sanity-checked by path), and register any that match.
            if (ModulePath.IsInitPyFile(FilePath))
            {
                string pathPrefix = PathUtils.EnsureEndSeparator(Path.GetDirectoryName(FilePath));
                var    children   =
                    from pair in ProjectState.ModulesByFilename
                    // Is the candidate child package in a subdirectory of our package?
                    let fileName = pair.Key
                                   where fileName.StartsWithOrdinal(pathPrefix, ignoreCase: true)
                                   let moduleName = pair.Value.Name
                                                    // Is the full name of the candidate child package qualified with the name of our package?
                                                    let lastDot = moduleName.LastIndexOf('.')
                                                                  where lastDot > 0
                                                                  let parentModuleName = moduleName.Substring(0, lastDot)
                                                                                         where parentModuleName == MyScope.Name
                                                                                         select pair.Value;
                foreach (var child in children)
                {
                    MyScope.AddChildPackage(child, _unit);
                }
            }

            _unit.Enqueue();

            if (!enqueueOnly)
            {
                ProjectState.AnalyzeQueuedEntries(cancel);
            }

            // publish the analysis now that it's complete/running
            Analysis = new ModuleAnalysis(
                _unit,
                ((ModuleScope)_unit.Scope).CloneForPublish(),
                DocumentUri,
                AnalysisVersion
                );
        }
 public MyLanguage()
 {
     Scope = new MyScope();
 }
 public MyLanguage()
 {
     Scope = new MyScope();
 }