diff --git a/Common/Product/SharedProject/CommonProjectNode.cs b/Common/Product/SharedProject/CommonProjectNode.cs index facb6260e..3ffbed354 100644 --- a/Common/Product/SharedProject/CommonProjectNode.cs +++ b/Common/Product/SharedProject/CommonProjectNode.cs @@ -1549,7 +1549,7 @@ protected override ConfigProvider CreateConfigProvider() { /// Returns resolved value of the current working directory property. /// public string GetWorkingDirectory() { - string workDir = CommonUtils.UnquotePath(GetProjectProperty(CommonConstants.WorkingDirectory, resetCache: false)); + var workDir = CommonUtils.UnquotePath(GetProjectProperty(CommonConstants.WorkingDirectory, resetCache: false)); return CommonUtils.GetAbsoluteDirectoryPath(ProjectHome, workDir); } diff --git a/Common/Product/SharedProject/CommonUtils.cs b/Common/Product/SharedProject/CommonUtils.cs index 997a6b791..2af4cdbde 100644 --- a/Common/Product/SharedProject/CommonUtils.cs +++ b/Common/Product/SharedProject/CommonUtils.cs @@ -46,7 +46,6 @@ internal static Uri MakeUri(string path, bool isDirectory, UriKind kind, string } return new Uri(path, kind); - } catch (UriFormatException ex) { throw new ArgumentException("Path was invalid", throwParameterName, ex); } catch (ArgumentException ex) { @@ -62,6 +61,13 @@ public static string NormalizePath(string path) { return null; } + const string MdhaPrefix = "mdha:"; + + // webkit debugger prepends with 'mdha' + if (path.StartsWith(MdhaPrefix, StringComparison.OrdinalIgnoreCase)) { + path = path.Substring(MdhaPrefix.Length); + } + var uri = MakeUri(path, false, UriKind.RelativeOrAbsolute); if (uri.IsAbsoluteUri) { if (uri.IsFile) { diff --git a/Common/Product/SharedProject/ProjectNode.cs b/Common/Product/SharedProject/ProjectNode.cs index 738d03052..fa5addc06 100644 --- a/Common/Product/SharedProject/ProjectNode.cs +++ b/Common/Product/SharedProject/ProjectNode.cs @@ -4496,7 +4496,6 @@ public virtual int IsDocumentInProject(string mkDoc, out int found, VSDOCUMENTPR } return VSConstants.S_OK; - } protected virtual bool IncludeNonMemberItemInProject(HierarchyNode node) { diff --git a/Nodejs/Product/Nodejs/Debugger/DebugEngine/AD7Engine.cs b/Nodejs/Product/Nodejs/Debugger/DebugEngine/AD7Engine.cs index da4304a5d..7d7b5c991 100644 --- a/Nodejs/Product/Nodejs/Debugger/DebugEngine/AD7Engine.cs +++ b/Nodejs/Product/Nodejs/Debugger/DebugEngine/AD7Engine.cs @@ -85,11 +85,6 @@ public sealed class AD7Engine : IDebugEngine2, IDebugEngineLaunch2, IDebugProgra /// public const string WaitOnNormalExitSetting = "WAIT_ON_NORMAL_EXIT"; - /// - /// Specifies if the output should be redirected to the visual studio output window. - /// - public const string RedirectOutputSetting = "REDIRECT_OUTPUT"; - /// /// Specifies options which should be passed to the Node runtime before the script. If /// the interpreter options should include a semicolon then it should be escaped as a double @@ -517,11 +512,6 @@ int IDebugEngineLaunch2.LaunchSuspended(string pszServer, IDebugPort2 port, stri debugOptions |= NodeDebugOptions.WaitOnNormalExit; } break; - case RedirectOutputSetting: - if (Boolean.TryParse(setting[1], out value) && value) { - debugOptions |= NodeDebugOptions.RedirectOutput; - } - break; case DirMappingSetting: string[] dirs = setting[1].Split('|'); if (dirs.Length == 2) { @@ -565,9 +555,10 @@ int IDebugEngineLaunch2.LaunchSuspended(string pszServer, IDebugPort2 port, stri AttachEvents(_process); - var adProcessId = new AD_PROCESS_ID(); - adProcessId.ProcessIdType = (uint)enum_AD_PROCESS_ID.AD_PROCESS_ID_SYSTEM; - adProcessId.dwProcessId = (uint)_process.Id; + var adProcessId = new AD_PROCESS_ID() { + ProcessIdType = (uint)enum_AD_PROCESS_ID.AD_PROCESS_ID_SYSTEM, + dwProcessId = (uint)_process.Id + }; EngineUtils.RequireOk(port.GetProcess(adProcessId, out process)); LiveLogger.WriteLine("AD7Engine LaunchSuspended returning S_OK"); diff --git a/Nodejs/Product/Nodejs/Debugger/NodeConstants.cs b/Nodejs/Product/Nodejs/Debugger/NodeConstants.cs index e1ba0984a..a67019214 100644 --- a/Nodejs/Product/Nodejs/Debugger/NodeConstants.cs +++ b/Nodejs/Product/Nodejs/Debugger/NodeConstants.cs @@ -15,7 +15,7 @@ //*********************************************************// namespace Microsoft.NodejsTools.Debugger { - sealed class NodeConstants { + internal sealed class NodeConstants { public const string ScriptWrapBegin = "(function (exports, require, module, __filename, __dirname) { "; public const string ScriptWrapEnd = "\n});"; } diff --git a/Nodejs/Product/Nodejs/Debugger/NodeDebugOptions.cs b/Nodejs/Product/Nodejs/Debugger/NodeDebugOptions.cs index 7af3abe32..a4d475c8d 100644 --- a/Nodejs/Product/Nodejs/Debugger/NodeDebugOptions.cs +++ b/Nodejs/Product/Nodejs/Debugger/NodeDebugOptions.cs @@ -18,7 +18,7 @@ namespace Microsoft.NodejsTools.Debugger { [Flags] - enum NodeDebugOptions { + internal enum NodeDebugOptions { None, /// /// Passing this flag to the debugger will cause it to wait for input on an abnormal (non-zero) @@ -29,15 +29,5 @@ enum NodeDebugOptions { /// Passing this flag to the debugger will cause it to wait for input on a normal (zero) exit code. /// WaitOnNormalExit = 0x02, - /// - /// Passing this flag will cause output to standard out to be redirected via the debugger - /// so it can be outputted in the Visual Studio debug output window. - /// - RedirectOutput = 0x04, - - /// - /// Set if you do not want to create a window - /// - CreateNoWindow = 0x40 } } diff --git a/Nodejs/Product/Nodejs/Debugger/NodeDebugger.cs b/Nodejs/Product/Nodejs/Debugger/NodeDebugger.cs index 29cb27bd2..c98c680e4 100644 --- a/Nodejs/Product/Nodejs/Debugger/NodeDebugger.cs +++ b/Nodejs/Product/Nodejs/Debugger/NodeDebugger.cs @@ -36,8 +36,8 @@ namespace Microsoft.NodejsTools.Debugger { /// /// Handles all interactions with a Node process which is being debugged. /// - sealed class NodeDebugger : IDisposable { - public readonly int MainThreadId = 1; + internal sealed class NodeDebugger : IDisposable { + public const int MainThreadId = 1; private readonly Dictionary _breakpointBindings = new Dictionary(); private readonly IDebuggerClient _client; private readonly IDebuggerConnection _connection; @@ -76,6 +76,13 @@ private NodeDebugger() { _fileNameMapper = new LocalFileNameMapper(); } + public NodeDebugger(Uri debuggerEndpointUri, int id) + : this() { + _debuggerEndpointUri = debuggerEndpointUri; + _id = id; + _attached = true; + } + public NodeDebugger( string exe, string script, @@ -87,28 +94,71 @@ public NodeDebugger( bool createNodeWindow = true) : this() { // Select debugger port for a local connection - ushort debuggerPortOrDefault = NodejsConstants.DefaultDebuggerPort; - if (debuggerPort != null) { - debuggerPortOrDefault = debuggerPort.Value; - } else { - List activeConnections = - (from listener in IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners() - select listener.Port).ToList(); - if (activeConnections.Contains(debuggerPortOrDefault)) { - debuggerPortOrDefault = (ushort)Enumerable.Range(new Random().Next(5859, 6000), 60000).Except(activeConnections).First(); - } + var debuggerPortOrDefault = debuggerPort ?? GetDebuggerPort(); + _debuggerEndpointUri = new UriBuilder { Scheme = "tcp", Host = "localhost", Port = debuggerPortOrDefault }.Uri; + + _process = StartNodeProcessWithDebug(exe, script, dir, env, interpreterOptions, debugOptions, debuggerPortOrDefault, createNodeWindow); + } + + private static ushort GetDebuggerPort() { + var debuggerPortOrDefault = NodejsConstants.DefaultDebuggerPort; + + var activeConnections = (from listener in IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners() + select listener.Port).ToList(); + + if (activeConnections.Contains(debuggerPortOrDefault)) { + debuggerPortOrDefault = (ushort)Enumerable.Range(new Random().Next(5859, 6000), 60000).Except(activeConnections).First(); } - _debuggerEndpointUri = new UriBuilder { Scheme = "tcp", Host = "localhost", Port = debuggerPortOrDefault }.Uri; + return debuggerPortOrDefault; + } + + public static NodeProcess StartNodeProcessWithDebug( + string exe, + string script, + string dir, + string env, + string interpreterOptions, + NodeDebugOptions debugOptions, + ushort? debuggerPort = null, + bool createNodeWindow = true) { + // Select debugger port for a local connection + var debuggerPortOrDefault = debuggerPort ?? GetDebuggerPort(); + + // Node usage: node [options] [ -e script | script.js ] [arguments] + var allArgs = $"--debug-brk={debuggerPortOrDefault} --nolazy {interpreterOptions} \"{CommonUtils.UnquotePath(script)}\""; /* unquote the path so we can safely add quotes */ + + return StartNodeProcess(exe, dir, env, debugOptions, debuggerPortOrDefault, allArgs, createNodeWindow); + } + + public static NodeProcess StartNodeProcessWithInspect( + string exe, + string script, + string dir, + string env, + string interpreterOptions, + NodeDebugOptions debugOptions, + ushort? debuggerPort = null, + bool createNodeWindow = true) { + // Select debugger port for a local connection + var debuggerPortOrDefault = debuggerPort ?? GetDebuggerPort(); // Node usage: node [options] [ -e script | script.js ] [arguments] - string allArgs = string.Format(CultureInfo.InvariantCulture, - "--debug-brk={0} --nolazy {1} {2}", - debuggerPortOrDefault, - interpreterOptions, - script - ); + var allArgs = $"--inspect={debuggerPortOrDefault} --debug-brk --nolazy {interpreterOptions} \"{CommonUtils.UnquotePath(script)}\""; /* unquote the path so we can safely add quotes */ + return StartNodeProcess(exe, dir, env, debugOptions, debuggerPortOrDefault, allArgs, createNodeWindow); + } + + // starts the nodeprocess in debug mode without hooking up our debugger, this way we can attach the WebKit debugger as a next step. + private static NodeProcess StartNodeProcess( + string exe, + string dir, + string env, + NodeDebugOptions + debugOptions, + ushort debuggerPortOrDefault, + string allArgs, + bool createNodeWindow) { var psi = new ProcessStartInfo(exe, allArgs) { CreateNoWindow = !createNodeWindow, WorkingDirectory = dir, @@ -116,42 +166,30 @@ public NodeDebugger( }; if (env != null) { - string[] envValues = env.Split('\0'); - foreach (string curValue in envValues) { - string[] nameValue = curValue.Split(new[] { '=' }, 2); - if (nameValue.Length == 2 && !String.IsNullOrWhiteSpace(nameValue[0])) { + var envValues = env.Split('\0'); + foreach (var curValue in envValues) { + var nameValue = curValue.Split(new[] { '=' }, 2); + if (nameValue.Length == 2 && !string.IsNullOrWhiteSpace(nameValue[0])) { psi.EnvironmentVariables[nameValue[0]] = nameValue[1]; } } } - _process = new NodeProcess( + return new NodeProcess( psi, - debugOptions.HasFlag(NodeDebugOptions.WaitOnAbnormalExit), - debugOptions.HasFlag(NodeDebugOptions.WaitOnNormalExit), - true); - } - - public NodeDebugger(Uri debuggerEndpointUri, int id) - : this() { - _debuggerEndpointUri = debuggerEndpointUri; - _id = id; - _attached = true; + waitOnAbnormal: debugOptions.HasFlag(NodeDebugOptions.WaitOnAbnormalExit), + waitOnNormal: debugOptions.HasFlag(NodeDebugOptions.WaitOnNormalExit), + enableRaisingEvents: true, + debuggerPort: debuggerPortOrDefault); } #region Public Process API - public int Id { - get { return _id != null ? _id.Value : _process.Id; } - } + public int Id => _id != null ? _id.Value : _process.Id; - private NodeThread MainThread { - get { return _threads[MainThreadId]; } - } + private NodeThread MainThread => _threads[MainThreadId]; - public bool HasExited { - get { return !_connection.Connected; } - } + public bool HasExited => !_connection.Connected; /// /// Gets or sets a value indicating whether executed remote debugging process. @@ -236,7 +274,7 @@ public async Task BreakAllAsync() { // We need to get the backtrace before we break, so we request the backtrace // and follow up with firing the appropriate event for the break tokenSource = new CancellationTokenSource(_timeout); - bool running = await PerformBacktraceAsync(tokenSource.Token).ConfigureAwait(false); + var running = await PerformBacktraceAsync(tokenSource.Token).ConfigureAwait(false); Debug.Assert(!running); // Fallback to firing step complete event @@ -424,16 +462,12 @@ public void ClearExceptionTreatment() { /// /// Gets a next command identifier. /// - private int CommandId { - get { return Interlocked.Increment(ref _commandId); } - } + private int CommandId => Interlocked.Increment(ref _commandId); /// /// Gets a source mapper. /// - public SourceMapper SourceMapper { - get { return _sourceMapper; } - } + public SourceMapper SourceMapper => _sourceMapper; /// /// Gets or sets a file name mapper. @@ -650,7 +684,7 @@ private async Task ProcessBreakpointBreakAsync( } SetBreakpointCommand result = await SetBreakpointAsync(breakpoint, cancellationToken: cancellationToken).ConfigureAwait(false); - + // Treat rebound breakpoint binding as fully bound NodeBreakpointBinding reboundbreakpointBinding = CreateBreakpointBinding(breakpoint, result.BreakpointId, result.ScriptId, breakpoint.GetPosition(SourceMapper).FileName, result.Line, result.Column, true); HandleBindBreakpointSuccess(reboundbreakpointBinding, breakpoint); @@ -712,7 +746,7 @@ private void OnExceptionEvent(object sender, ExceptionEventArgs args) { var lookupCommand = new LookupCommand(CommandId, _resultFactory, new[] { exception.ErrorNumber.Value }); string errorCodeFromLookup = null; - + if (await TrySendRequestAsync(lookupCommand).ConfigureAwait(false)) { errorCodeFromLookup = lookupCommand.Results[errorNumber][0].StringValue; _errorCodes[errorNumber] = errorCodeFromLookup; @@ -1049,7 +1083,7 @@ internal async Task UpdateBreakpointBindingAsync( internal async Task GetBreakpointHitCountAsync(int breakpointId, CancellationToken cancellationToken = new CancellationToken()) { var listBreakpointsCommand = new ListBreakpointsCommand(CommandId); - + int hitCount; if (await TrySendRequestAsync(listBreakpointsCommand, cancellationToken).ConfigureAwait(false) && listBreakpointsCommand.Breakpoints.TryGetValue(breakpointId, out hitCount)) { @@ -1160,7 +1194,7 @@ internal async Task SetVariableValueAsync( return false; } } - + #endregion #region Debugging Events @@ -1211,7 +1245,7 @@ private bool GetOrAddModule(NodeModule module, out NodeModule value, NodeStackFr javaScriptFileName = FileNameMapper.GetLocalFileName(javaScriptFileName); // Try to get mapping for JS file - if(stackFrame != null) { + if (stackFrame != null) { line = stackFrame.Line; column = stackFrame.Column; } @@ -1255,8 +1289,6 @@ public NodeModule GetModuleForFilePath(string filePath) { internal void Close() { } - - #region IDisposable public void Dispose() { diff --git a/Nodejs/Product/Nodejs/Debugger/NodeEvaluationResult.cs b/Nodejs/Product/Nodejs/Debugger/NodeEvaluationResult.cs index ffb69e6d6..359d7275c 100644 --- a/Nodejs/Product/Nodejs/Debugger/NodeEvaluationResult.cs +++ b/Nodejs/Product/Nodejs/Debugger/NodeEvaluationResult.cs @@ -24,7 +24,7 @@ namespace Microsoft.NodejsTools.Debugger { /// /// Represents the result of an evaluation of an expression against a given stack frame. /// - class NodeEvaluationResult { + internal class NodeEvaluationResult { private readonly Regex _stringLengthExpression = new Regex(@"\.\.\. \(length: ([0-9]+)\)$", RegexOptions.Compiled); /// diff --git a/Nodejs/Product/Nodejs/Debugger/NodeEventEventArgs.cs b/Nodejs/Product/Nodejs/Debugger/NodeEventEventArgs.cs deleted file mode 100644 index 933cc41e9..000000000 --- a/Nodejs/Product/Nodejs/Debugger/NodeEventEventArgs.cs +++ /dev/null @@ -1,28 +0,0 @@ -//*********************************************************// -// Copyright (c) Microsoft. All rights reserved. -// -// Apache 2.0 License -// -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -// implied. See the License for the specific language governing -// permissions and limitations under the License. -// -//*********************************************************// - -using System; -using System.Collections.Generic; - -namespace Microsoft.NodejsTools.Debugger { - sealed class NodeEventEventArgs : EventArgs { - public readonly Dictionary Data; - - public NodeEventEventArgs(Dictionary data) { - Data = data; - } - } -} \ No newline at end of file diff --git a/Nodejs/Product/Nodejs/Debugger/NodeProcess.cs b/Nodejs/Product/Nodejs/Debugger/NodeProcess.cs index 935af5b88..885bbb0a4 100644 --- a/Nodejs/Product/Nodejs/Debugger/NodeProcess.cs +++ b/Nodejs/Product/Nodejs/Debugger/NodeProcess.cs @@ -29,13 +29,17 @@ namespace Microsoft.NodejsTools.Debugger { sealed class NodeProcess : IDisposable { private readonly ProcessStartInfo _psi; private readonly bool _waitOnAbnormal, _waitOnNormal, _enableRaisingEvents; - private Process _process, _pressAnyKeyProcess; + private Process _process; + private Process _pressAnyKeyProcess; - public NodeProcess(ProcessStartInfo psi, bool waitOnAbnormal, bool waitOnNormal, bool enableRaisingEvents) { + public ushort DebuggerPort { get; } + + public NodeProcess(ProcessStartInfo psi, bool waitOnAbnormal, bool waitOnNormal, bool enableRaisingEvents, ushort debuggerPort = 0) { _psi = psi; _waitOnAbnormal = waitOnAbnormal; _waitOnNormal = waitOnNormal; _enableRaisingEvents = enableRaisingEvents; + DebuggerPort = debuggerPort; } public static NodeProcess Start(ProcessStartInfo psi, bool waitOnAbnormal, bool waitOnNormal) { diff --git a/Nodejs/Product/Nodejs/Logging/LiveLogger.cs b/Nodejs/Product/Nodejs/Logging/LiveLogger.cs index 745820dc3..42fb0c4f4 100644 --- a/Nodejs/Product/Nodejs/Logging/LiveLogger.cs +++ b/Nodejs/Product/Nodejs/Logging/LiveLogger.cs @@ -14,11 +14,11 @@ // //*********************************************************// -using Microsoft.NodejsTools.Options; -using Microsoft.VisualStudioTools.Project; using System; using System.Diagnostics; using System.Globalization; +using Microsoft.NodejsTools.Options; +using Microsoft.VisualStudioTools.Project; namespace Microsoft.NodejsTools.Logging { diff --git a/Nodejs/Product/Nodejs/Nodejs.csproj b/Nodejs/Product/Nodejs/Nodejs.csproj index d364a2828..efb0b3f83 100644 --- a/Nodejs/Product/Nodejs/Nodejs.csproj +++ b/Nodejs/Product/Nodejs/Nodejs.csproj @@ -1,4 +1,4 @@ - + @@ -404,7 +404,6 @@ - @@ -890,7 +889,6 @@ SalsaLsIntellisenseOptionsControl.cs - NewFileNameForm.cs @@ -915,7 +913,6 @@ - NodejsGeneralPropertyPageControl.cs @@ -940,7 +937,6 @@ - NodejsGeneralOptionsControl.cs @@ -950,6 +946,7 @@ PublicResXFileCodeGenerator NodejsGeneralOptionsControl.cs + Designer @@ -965,7 +962,6 @@ - NodejsNpmOptionsControl.cs @@ -990,7 +986,6 @@ - diff --git a/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.Designer.cs b/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.Designer.cs index 9521934a3..830624ea1 100644 --- a/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.Designer.cs +++ b/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.Designer.cs @@ -24,45 +24,22 @@ protected override void Dispose(bool disposing) { /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NodejsGeneralOptionsControl)); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this._surveyNewsCheckLabel = new System.Windows.Forms.Label(); - this._surveyNewsCheckCombo = new System.Windows.Forms.ComboBox(); this._topOptionsPanel = new System.Windows.Forms.Panel(); this._checkForLongPaths = new System.Windows.Forms.CheckBox(); this._editAndContinue = new System.Windows.Forms.CheckBox(); this._waitOnNormalExit = new System.Windows.Forms.CheckBox(); this._waitOnAbnormalExit = new System.Windows.Forms.CheckBox(); - this.tableLayoutPanel3.SuspendLayout(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this._surveyNewsCheckLabel = new System.Windows.Forms.Label(); + this._surveyNewsCheckCombo = new System.Windows.Forms.ComboBox(); + this._webkitDebugger = new System.Windows.Forms.CheckBox(); this._topOptionsPanel.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); this.SuspendLayout(); // - // tableLayoutPanel3 - // - resources.ApplyResources(this.tableLayoutPanel3, "tableLayoutPanel3"); - this.tableLayoutPanel3.Controls.Add(this._surveyNewsCheckLabel, 0, 7); - this.tableLayoutPanel3.Controls.Add(this._surveyNewsCheckCombo, 1, 7); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - // - // _surveyNewsCheckLabel - // - resources.ApplyResources(this._surveyNewsCheckLabel, "_surveyNewsCheckLabel"); - this._surveyNewsCheckLabel.Name = "_surveyNewsCheckLabel"; - // - // _surveyNewsCheckCombo - // - resources.ApplyResources(this._surveyNewsCheckCombo, "_surveyNewsCheckCombo"); - this._surveyNewsCheckCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._surveyNewsCheckCombo.DropDownWidth = 172; - this._surveyNewsCheckCombo.FormattingEnabled = true; - this._surveyNewsCheckCombo.Items.AddRange(new object[] { - resources.GetString("_surveyNewsCheckCombo.Items"), - resources.GetString("_surveyNewsCheckCombo.Items1"), - resources.GetString("_surveyNewsCheckCombo.Items2"), - resources.GetString("_surveyNewsCheckCombo.Items3")}); - this._surveyNewsCheckCombo.Name = "_surveyNewsCheckCombo"; - // // _topOptionsPanel // + this._topOptionsPanel.Controls.Add(this._webkitDebugger); this._topOptionsPanel.Controls.Add(this._checkForLongPaths); this._topOptionsPanel.Controls.Add(this._editAndContinue); this._topOptionsPanel.Controls.Add(this._waitOnNormalExit); @@ -94,6 +71,37 @@ private void InitializeComponent() { this._waitOnAbnormalExit.Name = "_waitOnAbnormalExit"; this._waitOnAbnormalExit.UseVisualStyleBackColor = true; // + // tableLayoutPanel3 + // + resources.ApplyResources(this.tableLayoutPanel3, "tableLayoutPanel3"); + this.tableLayoutPanel3.Controls.Add(this._surveyNewsCheckLabel, 0, 7); + this.tableLayoutPanel3.Controls.Add(this._surveyNewsCheckCombo, 1, 7); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + // + // _surveyNewsCheckLabel + // + resources.ApplyResources(this._surveyNewsCheckLabel, "_surveyNewsCheckLabel"); + this._surveyNewsCheckLabel.Name = "_surveyNewsCheckLabel"; + // + // _surveyNewsCheckCombo + // + resources.ApplyResources(this._surveyNewsCheckCombo, "_surveyNewsCheckCombo"); + this._surveyNewsCheckCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._surveyNewsCheckCombo.DropDownWidth = 172; + this._surveyNewsCheckCombo.FormattingEnabled = true; + this._surveyNewsCheckCombo.Items.AddRange(new object[] { + resources.GetString("_surveyNewsCheckCombo.Items"), + resources.GetString("_surveyNewsCheckCombo.Items1"), + resources.GetString("_surveyNewsCheckCombo.Items2"), + resources.GetString("_surveyNewsCheckCombo.Items3")}); + this._surveyNewsCheckCombo.Name = "_surveyNewsCheckCombo"; + // + // _webkitDebugger + // + resources.ApplyResources(this._webkitDebugger, "_webkitDebugger"); + this._webkitDebugger.Name = "_webkitDebugger"; + this._webkitDebugger.UseVisualStyleBackColor = true; + // // NodejsGeneralOptionsControl // resources.ApplyResources(this, "$this"); @@ -101,24 +109,24 @@ private void InitializeComponent() { this.Controls.Add(this.tableLayoutPanel3); this.Controls.Add(this._topOptionsPanel); this.Name = "NodejsGeneralOptionsControl"; - this.tableLayoutPanel3.ResumeLayout(false); - this.tableLayoutPanel3.PerformLayout(); this._topOptionsPanel.ResumeLayout(false); this._topOptionsPanel.PerformLayout(); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); } #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; - private System.Windows.Forms.Label _surveyNewsCheckLabel; - private System.Windows.Forms.ComboBox _surveyNewsCheckCombo; private System.Windows.Forms.Panel _topOptionsPanel; private System.Windows.Forms.CheckBox _waitOnNormalExit; private System.Windows.Forms.CheckBox _waitOnAbnormalExit; private System.Windows.Forms.CheckBox _editAndContinue; private System.Windows.Forms.CheckBox _checkForLongPaths; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.Label _surveyNewsCheckLabel; + private System.Windows.Forms.ComboBox _surveyNewsCheckCombo; + private System.Windows.Forms.CheckBox _webkitDebugger; } } diff --git a/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.cs b/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.cs index 2cc6ec645..646d543bc 100644 --- a/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.cs +++ b/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.cs @@ -66,6 +66,11 @@ internal void SyncControlWithPageSettings(NodejsGeneralOptionsPage page) { _waitOnNormalExit.Checked = page.WaitOnNormalExit; _editAndContinue.Checked = page.EditAndContinue; _checkForLongPaths.Checked = page.CheckForLongPaths; + _webkitDebugger.Checked = page.UseWebKitDebugger; + +#if !DEV15 + _webkitDebugger.Enabled = false; +#endif } internal void SyncPageWithControlSettings(NodejsGeneralOptionsPage page) { @@ -74,6 +79,7 @@ internal void SyncPageWithControlSettings(NodejsGeneralOptionsPage page) { page.WaitOnNormalExit = _waitOnNormalExit.Checked; page.EditAndContinue = _editAndContinue.Checked; page.CheckForLongPaths = _checkForLongPaths.Checked; + page.UseWebKitDebugger = _webkitDebugger.Checked; } } } \ No newline at end of file diff --git a/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.cs.resx b/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.cs.resx index 53571274f..edd97a0b1 100644 --- a/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.cs.resx +++ b/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.cs.resx @@ -208,7 +208,7 @@ Fill - 0, 97 + 0, 120 3, 4, 3, 4 @@ -217,7 +217,7 @@ 9 - 381, 193 + 381, 170 0 @@ -237,6 +237,33 @@ <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="_surveyNewsCheckLabel" Row="7" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="_surveyNewsCheckCombo" Row="7" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,20" /></TableLayoutSettings> + + True + + + 4, 96 + + + 96, 17 + + + 5 + + + Use the new NodeJs debugger protocol (experimental since v6.8) + + + _webkitDebugger + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + _topOptionsPanel + + + 0 + True @@ -262,7 +289,7 @@ _topOptionsPanel - 0 + 1 True @@ -289,7 +316,7 @@ _topOptionsPanel - 1 + 2 True @@ -316,7 +343,7 @@ _topOptionsPanel - 2 + 3 True @@ -343,7 +370,7 @@ _topOptionsPanel - 3 + 4 Top @@ -352,7 +379,7 @@ 0, 0 - 381, 97 + 381, 120 1 diff --git a/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.de.resx b/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.de.resx index ab3d538b1..37e5e6f42 100644 --- a/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.de.resx +++ b/Nodejs/Product/Nodejs/Options/NodejsGeneralOptionsControl.de.resx @@ -1,4 +1,4 @@ - +