From 804cbd87c374801bb020203e3cac1377a0e3a7ce Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 22 Aug 2016 17:55:25 -0700 Subject: [PATCH 1/3] Alert User if Typescript is not Installed From #1208 **Bug** If TS is not properly installed, NTVS will silently crash when loaded. The root cause is GetNodejsLanguagePreferencesFromTypeScript **fix** Instead of throwing right away, alter the user that there is something wrong. Fixing this requires user intervention. --- Nodejs/Product/Nodejs/NodejsPackage.cs | 17 +++++++++++------ .../Product/Nodejs/Project/ProjectResources.cs | 1 + Nodejs/Product/Nodejs/Resources.resx | 3 +++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Nodejs/Product/Nodejs/NodejsPackage.cs b/Nodejs/Product/Nodejs/NodejsPackage.cs index 55a9518dc..fbe0d8de8 100644 --- a/Nodejs/Product/Nodejs/NodejsPackage.cs +++ b/Nodejs/Product/Nodejs/NodejsPackage.cs @@ -254,12 +254,17 @@ protected override void Initialize() { } public static LANGPREFERENCES3[] GetNodejsLanguagePreferencesFromTypeScript(IVsTextManager4 textMgr) { - var langPrefs = new LANGPREFERENCES3[1]; - langPrefs[0].guidLang = Guids.TypeScriptLanguageInfo; - ErrorHandler.ThrowOnFailure(textMgr.GetUserPreferences4(null, langPrefs, null)); - langPrefs[0].guidLang = typeof(NodejsLanguageInfo).GUID; - textMgr.SetUserPreferences4(null, langPrefs, null); - return langPrefs; + try { + var langPrefs = new LANGPREFERENCES3[1]; + langPrefs[0].guidLang = Guids.TypeScriptLanguageInfo; + ErrorHandler.ThrowOnFailure(textMgr.GetUserPreferences4(null, langPrefs, null)); + langPrefs[0].guidLang = typeof(NodejsLanguageInfo).GUID; + textMgr.SetUserPreferences4(null, langPrefs, null); + return langPrefs; + } catch (Exception) { + MessageBox.Show(Project.SR.GetString(Project.SR.CouldNotGetTypeScriptLanguagePreferences), Project.SR.ProductName); + throw; + } } private void SubscribeToVsCommandEvents( diff --git a/Nodejs/Product/Nodejs/Project/ProjectResources.cs b/Nodejs/Product/Nodejs/Project/ProjectResources.cs index e64906db9..7baa5a599 100644 --- a/Nodejs/Product/Nodejs/Project/ProjectResources.cs +++ b/Nodejs/Product/Nodejs/Project/ProjectResources.cs @@ -34,6 +34,7 @@ internal class SR : CommonSR { internal const string CacheDirectoryClearFailedTitle = "CacheDirectoryClearFailedTitle"; internal const string CacheDirectoryClearFailedCaption = "CacheDirectoryClearFailedCaption"; internal const string ContinueWithoutAzureToolsUpgrade = "ContinueWithoutAzureToolsUpgrade"; + internal const string CouldNotGetTypeScriptLanguagePreferences = "CouldNotGetTypeScriptLanguagePreferences"; internal const string DebuggerConnectionClosed = "DebuggerConnectionClosed"; internal const string DebuggerModuleUpdateFailed = "DebuggerModuleUpdateFailed"; internal const string DebuggerPort = "DebuggerPort"; diff --git a/Nodejs/Product/Nodejs/Resources.resx b/Nodejs/Product/Nodejs/Resources.resx index d2935891b..1ffe6e93a 100644 --- a/Nodejs/Product/Nodejs/Resources.resx +++ b/Nodejs/Product/Nodejs/Resources.resx @@ -627,4 +627,7 @@ You will need to restart Visual Studio after installation. Could not start Typings tool used for IntelliSense + + Could not retrieve Typescript language preferences. Please ensure Typescript is properly installed. + \ No newline at end of file From 47319f376ea13bc0053bd50796be0f9419bbe44e Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 22 Aug 2016 17:59:00 -0700 Subject: [PATCH 2/3] Check hr and then throw, instead of catching exception --- Nodejs/Product/Nodejs/NodejsPackage.cs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Nodejs/Product/Nodejs/NodejsPackage.cs b/Nodejs/Product/Nodejs/NodejsPackage.cs index fbe0d8de8..a4d76460d 100644 --- a/Nodejs/Product/Nodejs/NodejsPackage.cs +++ b/Nodejs/Product/Nodejs/NodejsPackage.cs @@ -254,17 +254,16 @@ protected override void Initialize() { } public static LANGPREFERENCES3[] GetNodejsLanguagePreferencesFromTypeScript(IVsTextManager4 textMgr) { - try { - var langPrefs = new LANGPREFERENCES3[1]; - langPrefs[0].guidLang = Guids.TypeScriptLanguageInfo; - ErrorHandler.ThrowOnFailure(textMgr.GetUserPreferences4(null, langPrefs, null)); - langPrefs[0].guidLang = typeof(NodejsLanguageInfo).GUID; - textMgr.SetUserPreferences4(null, langPrefs, null); - return langPrefs; - } catch (Exception) { + var langPrefs = new LANGPREFERENCES3[1]; + langPrefs[0].guidLang = Guids.TypeScriptLanguageInfo; + int hr = textMgr.GetUserPreferences4(null, langPrefs, null); + if (ErrorHandler.Failed(hr)) { MessageBox.Show(Project.SR.GetString(Project.SR.CouldNotGetTypeScriptLanguagePreferences), Project.SR.ProductName); - throw; + ErrorHandler.ThrowOnFailure(hr); } + langPrefs[0].guidLang = typeof(NodejsLanguageInfo).GUID; + textMgr.SetUserPreferences4(null, langPrefs, null); + return langPrefs; } private void SubscribeToVsCommandEvents( From cea52c901a2f0aeb3d1816d1c10f4f6192eec168 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 22 Aug 2016 17:59:50 -0700 Subject: [PATCH 3/3] Make it more clear that NTVS cannot load if this error happens --- Nodejs/Product/Nodejs/Resources.resx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Nodejs/Product/Nodejs/Resources.resx b/Nodejs/Product/Nodejs/Resources.resx index 1ffe6e93a..de03c6f9e 100644 --- a/Nodejs/Product/Nodejs/Resources.resx +++ b/Nodejs/Product/Nodejs/Resources.resx @@ -628,6 +628,6 @@ You will need to restart Visual Studio after installation. Could not start Typings tool used for IntelliSense - Could not retrieve Typescript language preferences. Please ensure Typescript is properly installed. + Could not retrieve Typescript language preferences. NTVS is not able to load. Please ensure Typescript is properly installed. \ No newline at end of file