From 5231b705e14976104c602aaf6549c2113c38afe0 Mon Sep 17 00:00:00 2001 From: Phodal Huang Date: Wed, 10 Apr 2024 10:02:59 +0800 Subject: [PATCH] feat(typescript): refactor JSDoc comment insertion logic to handle null values and exceptions more gracefully #2 --- .../provider/JavaScriptLivingDocumentation.kt | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/javascript/src/main/kotlin/cc/unitmesh/ide/javascript/provider/JavaScriptLivingDocumentation.kt b/javascript/src/main/kotlin/cc/unitmesh/ide/javascript/provider/JavaScriptLivingDocumentation.kt index ba8ac06c9f..f6cb318dfd 100644 --- a/javascript/src/main/kotlin/cc/unitmesh/ide/javascript/provider/JavaScriptLivingDocumentation.kt +++ b/javascript/src/main/kotlin/cc/unitmesh/ide/javascript/provider/JavaScriptLivingDocumentation.kt @@ -52,18 +52,16 @@ class JavaScriptLivingDocumentation : LivingDocumentation { ?: findDocFallback(target) try { - val createJSDocComment: PsiElement = JSPsiElementFactory.createJSDocComment(newDoc, target) - - if (existingComment != null) { - existingComment.replace(createJSDocComment) - } else { - val parent = target.parent - parent.addBefore(createJSDocComment, target) - JSChangeUtil.addWs(parent.node, target.node, "\n") - } + didInsertComment(newDoc, target, existingComment) } catch (e: Exception) { - editor.document.insertString(startOffset, newDoc) - codeStyleManager.reformatText(target.containingFile, startOffset, newEndOffset) + // second attempt + val fromSuggestion = LivingDocumentation.buildDocFromSuggestion(newDoc, "/**", "*/") + try { + didInsertComment(fromSuggestion, target, existingComment) + } catch (e: Exception) { + editor.document.insertString(startOffset, newDoc) + codeStyleManager.reformatText(target.containingFile, startOffset, newEndOffset) + } } } @@ -80,6 +78,18 @@ class JavaScriptLivingDocumentation : LivingDocumentation { }) } + private fun didInsertComment(newDoc: String, target: PsiElement, existingComment: JSDocComment?) { + val createJSDocComment: PsiElement = JSPsiElementFactory.createJSDocComment(newDoc, target) + + if (existingComment != null) { + existingComment.replace(createJSDocComment) + } else { + val parent = target.parent + parent.addBefore(createJSDocComment, target) + JSChangeUtil.addWs(parent.node, target.node, "\n") + } + } + private fun findDocFallback(documentationTarget: PsiElement): JSDocComment? { val parentOfDestructuring: PsiElement? by lazy { var context = documentationTarget.context