示例#1
0
        public void TryParseGeneratesProperty()
        {
            string result;
            int    caretPosition;

            foreach (string accessibilityLevel in _accessibilityLevels.Keys)
            {
                foreach (string modifier in _modifiers.Keys)
                {
                    foreach (string type in _types.Keys)
                    {
                        string visibility = _accessibilityLevels[accessibilityLevel];
                        string mod        = _modifiers[modifier];
                        string returns    = _types[type];
                        string mnemonic   = accessibilityLevel + modifier + type + "p";

                        MnemonicParser.TryParse(mnemonic, "    ", out result, out caretPosition)
                        .Should()
                        .BeTrue($"Mnemonic {mnemonic} is valid.");

                        result.Should().Be($"{visibility} {mod} {returns}  {{ get; set; }}");
                    }
                }
            }
        }
        public override int Exec(
            ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
        {
            if (PackageGuids.GuidEmmetPackageCmdSet != pguidCmdGroup ||
                PackageIds.CmdIDExpandMnemonic != nCmdID)
            {
                return(base.Exec(ref pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut));
            }

            // Get mnemonic content from editor.
            SnapshotPoint     caretPosition = View.WpfView.Caret.Position.BufferPosition;
            ITextSnapshotLine line          = View.WpfView.Caret.Position.BufferPosition.GetContainingLine();
            string            lineText      = line.GetText();

            if (caretPosition.Position != line.End || lineText.Length < 3)
            {
                return(VSConstants.S_OK);
            }

            string mnemonic = lineText.TrimStart();
            string indent   = new string(' ', lineText.Length - mnemonic.Length);
            string snippet  = string.Empty;
            int    caretOffset;

            if (!MnemonicParser.TryParse(mnemonic, indent, out snippet, out caretOffset))
            {
                return(VSConstants.S_OK);
            }

            // Insert generated snippet into the current editor window
            int  startPosition  = line.End.Position - mnemonic.Length;
            Span targetPosition = new Span(startPosition, mnemonic.Length);

            View.CurrentBuffer.Replace(targetPosition, snippet);

            // Close all intellisense windows
            _completionBroker.DismissAllSessions(View.WpfView);

            // Move caret to the position where user can start typing new member name
            caretPosition = new SnapshotPoint(
                View.CurrentBuffer.CurrentSnapshot,
                caretPosition.Position + caretOffset);
            View.WpfView.Caret.MoveTo(caretPosition);

            return(VSConstants.S_OK);
        }
示例#3
0
        /// <summary>
        /// Initialization of the package; this method is called right after the package is sited, so this
        /// is the place where you can put all the initialization code that rely on services provided by
        /// Visual Studio.
        /// </summary>
        /// <param name="token">Cancellation token that can signal abort.</param>
        /// <param name="progress">The progress indicator.</param>
        protected override async System.Threading.Tasks.Task InitializeAsync(
            CancellationToken token,
            IProgress <ServiceProgressData> progress)
        {
            Instance = this;

            if (Directory.Exists(Options.ExtensionsDir))
            {
                _engine = new EngineWrapper(Options.ExtensionsDir);
            }
            else
            {
                _engine = new EngineWrapper(null);
            }

            try
            {
                if (File.Exists(Options.MnemonicsConfiguration))
                {
                    MnemonicParser.MergeConfiguration(Options.MnemonicsConfiguration);
                }
            }
            catch
            {
                await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(token);

                ShowCriticalError(
                    $"Failed to load mnemonics configuration from {Options.MnemonicsConfiguration}");
            }

            SortCssPropertiesCommand.Initialize(this);

            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(token);

            Options = GetDialogPage(typeof(Options)) as Options;

            if (Options.WriteDebugMessages)
            {
                var pane = GetOutputPane(VSConstants.OutputWindowPaneGuid.DebugPane_guid, Vsix.Name);
                Tracer.Initialize(pane);
            }
        }