how to implement regions/code collapse in javascript

后端 未结 17 1601
灰色年华
灰色年华 2020-11-28 21:01

How can you implement regions a.k.a. code collapse for JavaScript in Visual Studio?

If there are hundreds of lines in javascript, it\'ll be more understandable using

相关标签:
17条回答
  • 2020-11-28 21:46

    if you are using Resharper

    fallow the steps in this pic

    then write this in template editor

      //#region $name$
    $END$$SELECTION$
      //#endregion $name$
    

    and name it #region as in this picture

    hope this help you

    0 讨论(0)
  • 2020-11-28 21:47

    Region should work without changing settings

    //#region Optional Naming
        var x = 5 -0; // Code runs inside #REGION
        /* Unnecessary code must be commented out */
    //#endregion
    

    To enable collapsing comment area /**/

    /* Collapse this
    
    */
    

    Settings -> Search "folding" -> Editor: Folding Strategy -> From "auto" to "indentation".

    TAGS: Node.js Nodejs Node js Javascript ES5 ECMAScript comment folding hiding region Visual studio code vscode 2018 version 1.2+ https://code.visualstudio.com/updates/v1_17#_folding-regions

    0 讨论(0)
  • 2020-11-28 21:51

    None of these answers did not work for me with visual studio 2017.

    The best plugin for VS 2017: JavaScript Regions

    Example 1:

    Example 2:

    Tested and approved:

    0 讨论(0)
  • 2020-11-28 21:52

    Thanks to 0A0D for a great answer. I've had good luck with it. Darin Dimitrov also makes a good argument about limiting the complexity of your JS files. Still, I do find occasions where collapsing functions to their definitions makes browsing through a file much easier.

    Regarding #region in general, this SO Question covers it quite well.

    I have made a few modifications to the Macro to support more advanced code collapse. This method allows you to put a description after the //#region keyword ala C# and shows it in the code as shown:

    Example code:

    //#region InputHandler
    var InputHandler = {
        inputMode: 'simple', //simple or advanced
    
        //#region filterKeys
        filterKeys: function(e) {
            var doSomething = true;
            if (doSomething) {
                alert('something');
            }
        },
        //#endregion filterKeys
    
        //#region handleInput
        handleInput: function(input, specialKeys) {
            //blah blah blah
        }
        //#endregion handleInput
    
    };
    //#endregion InputHandler
    

    Updated Macro:

    Option Explicit On
    Option Strict On
    
    Imports System
    Imports EnvDTE
    Imports EnvDTE80
    Imports EnvDTE90
    Imports System.Diagnostics
    Imports System.Collections.Generic
    
    Public Module JsMacros
    
    
        Sub OutlineRegions()
            Dim selection As EnvDTE.TextSelection = CType(DTE.ActiveDocument.Selection, EnvDTE.TextSelection)
    
            Const REGION_START As String = "//#region"
            Const REGION_END As String = "//#endregion"
    
            selection.SelectAll()
            Dim text As String = selection.Text
            selection.StartOfDocument(True)
    
            Dim startIndex As Integer
            Dim endIndex As Integer
            Dim lastIndex As Integer = 0
            Dim startRegions As New Stack(Of Integer)
    
            Do
                startIndex = text.IndexOf(REGION_START, lastIndex)
                endIndex = text.IndexOf(REGION_END, lastIndex)
    
                If startIndex = -1 AndAlso endIndex = -1 Then
                    Exit Do
                End If
    
                If startIndex <> -1 AndAlso startIndex < endIndex Then
                    startRegions.Push(startIndex)
                    lastIndex = startIndex + 1
                Else
                    ' Outline region ...
                    Dim tempStartIndex As Integer = CInt(startRegions.Pop())
                    selection.MoveToLineAndOffset(CalcLineNumber(text, tempStartIndex), CalcLineOffset(text, tempStartIndex))
                    selection.MoveToLineAndOffset(CalcLineNumber(text, endIndex) + 1, 1, True)
                    selection.OutlineSection()
    
                    lastIndex = endIndex + 1
                End If
            Loop
    
            selection.StartOfDocument()
        End Sub
    
        Private Function CalcLineNumber(ByVal text As String, ByVal index As Integer) As Integer
            Dim lineNumber As Integer = 1
            Dim i As Integer = 0
    
            While i < index
                If text.Chars(i) = vbLf Then
                    lineNumber += 1
                    i += 1
                End If
    
                If text.Chars(i) = vbCr Then
                    lineNumber += 1
                    i += 1
                    If text.Chars(i) = vbLf Then
                        i += 1 'Swallow the next vbLf
                    End If
                End If
    
                i += 1
            End While
    
            Return lineNumber
        End Function
    
        Private Function CalcLineOffset(ByVal text As String, ByVal index As Integer) As Integer
            Dim offset As Integer = 1
            Dim i As Integer = index - 1
    
            'Count backwards from //#region to the previous line counting the white spaces
            Dim whiteSpaces = 1
            While i >= 0
                Dim chr As Char = text.Chars(i)
                If chr = vbCr Or chr = vbLf Then
                    whiteSpaces = offset
                    Exit While
                End If
                i -= 1
                offset += 1
            End While
    
            'Count forwards from //#region to the end of the region line
            i = index
            offset = 0
            Do
                Dim chr As Char = text.Chars(i)
                If chr = vbCr Or chr = vbLf Then
                    Return whiteSpaces + offset
                End If
                offset += 1
                i += 1
            Loop
    
            Return whiteSpaces
        End Function
    
    End Module
    
    0 讨论(0)
  • 2020-11-28 21:52

    On VS 2012 and VS 2015 install WebEssentials plugin and you will able to do so.

    http://vswebessentials.com/features/javascript

    0 讨论(0)
  • 2020-11-28 21:54

    It works like a charm in PhpStorm

    //#region My Region 1
        ...
    //#endregion
    
    //#region My Region 2
        ...
    //#endregion
    
    

    0 讨论(0)
提交回复
热议问题