@@ -10,16 +10,21 @@ import com.intellij.lang.ecmascript6.psi.ES6ImportedBinding
10
10
import com.intellij.lang.javascript.psi.*
11
11
import com.intellij.lang.javascript.psi.ecma6.TypeScriptModule
12
12
import com.intellij.lang.javascript.psi.ecmal4.JSClass
13
+ import com.intellij.lang.javascript.psi.impl.JSChangeUtil
14
+ import com.intellij.lang.javascript.psi.impl.JSPsiElementFactory
13
15
import com.intellij.lang.javascript.psi.util.JSStubBasedPsiTreeUtil
14
16
import com.intellij.lang.javascript.psi.util.JSUtils
17
+ import com.intellij.openapi.command.WriteCommandAction
15
18
import com.intellij.openapi.editor.Editor
16
19
import com.intellij.openapi.editor.SelectionModel
17
20
import com.intellij.psi.PsiElement
18
21
import com.intellij.psi.PsiFile
19
22
import com.intellij.psi.PsiNameIdentifierOwner
20
23
import com.intellij.psi.ResolveState
24
+ import com.intellij.psi.codeStyle.CodeStyleManager
21
25
import com.intellij.psi.util.PsiTreeUtil
22
26
import com.intellij.psi.util.parentOfTypes
27
+ import com.intellij.util.IncorrectOperationException
23
28
24
29
class JavaScriptLivingDocumentation : LivingDocumentation {
25
30
override val forbiddenRules: List <String > = listOf (
@@ -36,7 +41,32 @@ class JavaScriptLivingDocumentation : LivingDocumentation {
36
41
}
37
42
38
43
override fun updateDoc (target : PsiElement , newDoc : String , type : LivingDocumentationType , editor : Editor ) {
39
- TODO (" Not yet implemented" )
44
+ val project = target.project
45
+ val codeStyleManager = CodeStyleManager .getInstance(project)
46
+ WriteCommandAction .runWriteCommandAction(project, " Living Document" , " cc.unitmesh.livingDoc" , {
47
+ val startOffset = target.textRange.startOffset
48
+ val newEndOffset = startOffset + newDoc.length
49
+
50
+ when (type) {
51
+ LivingDocumentationType .COMMENT -> {
52
+ val createJSDocComment: PsiElement = JSPsiElementFactory .createJSDocComment(newDoc, target)
53
+ val parent = target.parent
54
+ parent.addBefore(createJSDocComment, target)
55
+ JSChangeUtil .addWs(parent.node, target.node, " \n " )
56
+ }
57
+
58
+ LivingDocumentationType .ANNOTATED -> {
59
+ editor.document.insertString(startOffset, newDoc)
60
+ codeStyleManager.reformatText(target.containingFile, startOffset, newEndOffset)
61
+ }
62
+
63
+ LivingDocumentationType .CUSTOM -> {
64
+ editor.document.insertString(startOffset, newDoc)
65
+ codeStyleManager.reformatText(target.containingFile, startOffset, newEndOffset)
66
+ }
67
+ }
68
+ })
69
+
40
70
}
41
71
42
72
override fun findNearestDocumentationTarget (psiElement : PsiElement ): PsiNameIdentifierOwner ? {
0 commit comments