Community
    • 登入

    Function List not working in v7.2

    已排程 已置頂 已鎖定 已移動 Notepad++ & Plugin Development
    30 貼文 13 Posters 40.3k 瀏覽
    正在載入更多貼文
    • 從舊到新
    • 從新到舊
    • 最多點贊
    回覆
    • 在新貼文中回覆
    登入後回覆
    此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
    • Mike BeharM
      Mike Behar
      最後由 編輯

      Function List displays nothing in Notepad++ V7.2 (32 bit)
      Using functionList.xml from version 6.9.2 fixes the issue

      1 條回覆 最後回覆 回覆 引用 0
      • MAPJe71M
        MAPJe71
        最後由 編輯

        What language(s)?

        1 條回覆 最後回覆 回覆 引用 0
        • Gary WG
          Gary W
          最後由 編輯

          It doesn’t work for me, either. JavaScript, for one, doesn’t do anything. I tried replacing functionList.xml from 6.9.2, but I still get nothing.

          Claudia FrankC 1 條回覆 最後回覆 回覆 引用 0
          • Claudia FrankC
            Claudia Frank @Gary W
            最後由 編輯

            @Gary-W

            check your functionlist.xml file, it should work.

            Cheers
            Claudia

            1 條回覆 最後回覆 回覆 引用 0
            • Gary WG
              Gary W
              最後由 編輯

              I have a functionList.xml file, it doesn’t work. The function list is empty for JavaScript files. Earlier versions worked.

              1 條回覆 最後回覆 回覆 引用 0
              • Gary WG
                Gary W
                最後由 編輯

                This is a clean install of Notepad++ 7.2.2 32-bit on Windows 10.

                1 條回覆 最後回覆 回覆 引用 0
                • Acdc95731A
                  Acdc95731
                  最後由 編輯

                  Just try to modify you functionList.xml file this way.

                  add :

                  		<association langID="19" id="js_function"/>		
                  

                  and add the parser

                  		<parser id="js_function" displayName="Javascript" commentExpr="(?s:/\*.*?\*/)|(?m-s://.*?$)">
                  		
                  			<function
                  
                  				mainExpr="((^|\s+|[;\}\.])([A-Za-z_]\w*\.)*[A-Za-z_]\w*\s*[=:]|^|[\s;\}]+)\s*function(\s+[A-Za-z_]?\w*\([^\)\(]*\)|\([^\)\(]*\))[\n\s]*\{"
                  			>
                  				<functionName>
                  
                  
                  					<nameExpr expr="[A-Za-z_]\w*\s*[=:]|[A-Za-z_]?\w*\s*\(" />
                  					<nameExpr expr="[A-Za-z_]?\w*" />
                  				</functionName>
                  
                  
                  
                  				<className>
                  					<nameExpr expr="([A-Za-z_]\w*\.)*[A-Za-z_]\w*\." />
                  					<nameExpr expr="([A-Za-z_]\w*\.)*[A-Za-z_]\w*" />
                  				</className>
                  			</function>
                  			
                  		</parser>
                  

                  It’s works don’t ask me why !

                  1 條回覆 最後回覆 回覆 引用 1
                  • MAPJe71M
                    MAPJe71
                    最後由 MAPJe71 編輯

                    Notepad++ should assign the “L_JAVASCRIPT” language ID (= 58) to JavaScript files. It appears to assign the “old” language ID “L_JS” (= 19).

                    @donho is this a regression or am I missing something?

                    Claudia FrankC Acdc95731A 2 條回覆 最後回覆 回覆 引用 1
                    • Claudia FrankC
                      Claudia Frank @MAPJe71
                      最後由 編輯

                      @MAPJe71

                      my function.xml has even a note

                      Don't use L_JS (19) use L_JAVASCRIPT (58) instead!
                      

                      not to use 19 and as I’m 100% sure that I never touched javascript configuration,
                      because I don’t like java at all (I don’t want to start flame war - java has its validity)
                      I have to assume that this is the standard configuration.

                      Cheers
                      Claudia

                      1 條回覆 最後回覆 回覆 引用 0
                      • Gary WG
                        Gary W
                        最後由 編輯

                        19 or 58, nothing works. Where can I find a corrected functionList.xml?

                        1 條回覆 最後回覆 回覆 引用 0
                        • Gary WG
                          Gary W
                          最後由 編輯

                          There are two different files named functionList.xml. One is in Program Files (x86)\Notepad++. The other is in User\XXX\AppData\Roaming\Notepad++.

                          The latter one is much bigger and more comprehensive, and by default, uses 58 for the association ID. This file also has the apparently incorrect statement “Don’t use L_JS (19) use L_JAVASCRIPT (58) instead!”

                          When I change the association to 19, the function list works!

                          Claudia FrankC 1 條回覆 最後回覆 回覆 引用 0
                          • Claudia FrankC
                            Claudia Frank @Gary W
                            最後由 編輯

                            @Gary-W

                            depending on your configuration whether to use %APPDATA% configuration or not the respective
                            functionlist gets loaded. I’m still confused that your saying that after changing the id it is working for you.
                            Could it be that you use an embedded js version as in html?

                            Cheers
                            Claudia

                            1 條回覆 最後回覆 回覆 引用 0
                            • Gary WG
                              Gary W
                              最後由 編輯

                              No, I am using straight-up JS files, Claudia.

                              Claudia FrankC 1 條回覆 最後回覆 回覆 引用 0
                              • Claudia FrankC
                                Claudia Frank @Gary W
                                最後由 編輯

                                @Gary-W

                                ok - I can confirm. After complete deinstall and a wiping of all files and folders in
                                my installation directory and under %APPDATA% (which I thought I never used)
                                I reinstalled npp7.2.2. 32bit. Now I have the same behavior. The reason why it was working before is that I run into the doLocalConf bug.
                                I can’t say which version started ignoring the file but it seems 7.2.2 is doing it.
                                So @MAPJe71 was completely correct and I have to apologize.

                                Cheers
                                Claudia

                                1 條回覆 最後回覆 回覆 引用 1
                                • Acdc95731A
                                  Acdc95731 @MAPJe71
                                  最後由 編輯

                                  @MAPJe71 said:

                                  Notepad++ should assign the “L_JAVASCRIPT” language ID (= 58) to JavaScript files. It appears to assign the “old” language ID “L_JS” (= 19).

                                  @donho is this a regression or am I missing something?

                                  – Ver 7.4.1 32bits. for me the problem is still here. so I patched again my functionList.xml

                                  1 條回覆 最後回覆 回覆 引用 0
                                  • dinkumoilD
                                    dinkumoil
                                    最後由 編輯

                                    Hi @all,

                                    I also found a bug in the regular expression of the JavaScript parser for matching the pattern of a function header. If between the function name and the left parenthesis of the parameter list have been inserted one or more blanks the parser failed to find the function header.

                                    Npp version

                                    v7.4.1, 32 bit

                                    File

                                    C:\Program Files (x86)\Notepad++\functionList.xml
                                    copied to
                                    C:\Users<UserName>\AppData\Roaming\Notepad++\functionList.xml

                                    Corrected JavaScript parser

                                    <parser
                                    	displayName="JavaScript"
                                    	id         ="javascript_function"
                                    	commentExpr="(?s:/\*.*?\*/)|(?m-s://.*?$)"
                                    >
                                    	<function
                                    		mainExpr="((^|\s+|[;\}\.])([A-Za-z_]\w*\.)*[A-Za-z_]\w*\s*[=:]|^|[\s;\}]+)\s*function(\s+[A-Za-z_]?\w*\s*\([^\)\(]*\)|\([^\)\(]*\))[\n\s]*\{"
                                    	>
                                    		<functionName>
                                    			<nameExpr expr="[A-Za-z_]\w*\s*[=:]|[A-Za-z_]?\w*\s*\(" />
                                    			<nameExpr expr="[A-Za-z_]?\w*" />
                                    		</functionName>
                                    		<className>
                                    			<nameExpr expr="([A-Za-z_]\w*\.)*[A-Za-z_]\w*\." />
                                    			<nameExpr expr="([A-Za-z_]\w*\.)*[A-Za-z_]\w*" />
                                    		</className>
                                    	</function>
                                    </parser>
                                    

                                    The bug was located in the value of mainExpr.

                                    1 條回覆 最後回覆 回覆 引用 1
                                    • dinkumoilD
                                      dinkumoil
                                      最後由 dinkumoil 編輯

                                      I improved the parser for Inno Setup scripts too. Now it is also able to find procedures as well as functions/procedures with no or an empty parameter list. Furthermore forward declarations are no longer matched.

                                      <!-- ================================================== [ Inno Setup ] -->
                                      
                                      <parser
                                      	displayName="Inno Setup"
                                      	id         ="innosetup_syntax"
                                      >
                                      	<classRange
                                      		mainExpr    ="(?x)                                    # Utilize inline comments (see `RegEx - Pattern Modifiers`)
                                      				(?ms)
                                      				(?'SECTION_HEADER'
                                      					^                                               # header starts at beginning of a line
                                      					\[                                              # start of section header
                                      					(?-i:Code)                                      # `Code` section name
                                      					]                                               # end of section header
                                      				)
                                      				.*?                                               # whatever, up till...
                                      				(?=                                               # ...next valid section header or...
                                      					^                                               #    +-- header starts at beginning of a line
                                      					\[                                              #    +-- start-of-header indicator
                                      					(?-i:
                                      						Components|(?:Custom)?Messages
                                      					|	Dirs
                                      					|	Files
                                      					|	I(?:cons|nstallDelete)
                                      					|	Languages
                                      					|	R(?:egistry|un)
                                      					|	Setup
                                      					|	T(?:asks|ypes)
                                      					|	Uninstall(?:Delete|Run)
                                      					)                                               #    +-- valid section name
                                      					]                                               #    \-- end-of-header indicator
                                      				|	\Z                                              # ...end-of-file
                                      				)
                                      			"
                                      	>
                                      		<className>
                                      			<nameExpr expr="^\[\K[^\h\]]+(?=])" />
                                      		</className>
                                      		<function
                                      			mainExpr="(?x)                                      # Utilize inline comments (see `RegEx - Pattern Modifiers`)
                                      					(?m-s)                                          # multi-line mode on, single-line mode off
                                      					^\h*                                            # optional leading whitespace
                                      					(?i:
                                      						(
                                      							(?'FUNCTION_HEADER'                         # function
                                      								FUNCTION
                                      							)
                                      							|                                           # or
                                      							(?'PROCEDURE_HEADER'                        # procedure
                                      								PROCEDURE
                                      							)
                                      						)\h+
                                      					)
                                      					(?'VALID_ID'                                    # function/procedure identifier
                                      						[A-Za-z_]\w*
                                      					)
                                      					(                                               # optional parameter list
                                      						\s*\(                                         # start-of-parameter-list indicator
                                      						[^()]*                                        # parameter list
                                      						\)                                            # end-of-parameter-list indicator
                                      					)*
                                      					(?('FUNCTION_HEADER')                           # functions have a return type
                                      						(
                                      							\s*:                                        # type indicator
                                      							\s*[A-Za-z_]\w*                             # type identifier
                                      							\s*;                                        # end-of-statement indicator
                                      						)
                                      					)
                                      					(?('PROCEDURE_HEADER')                          # procedures don't have a return type
                                      						(
                                      							\s*;                                        # end-of-statement indicator
                                      						)
                                      					)
                                      					(?!(?i:\s*FORWARD\s*;))                         # prevent matching forward declarations
                                      				"
                                      		>
                                      			<functionName>
                                      				<funcNameExpr expr="(?i:(FUNCTION|PROCEDURE)\h+)\K[A-Za-z_]\w*\s*(\([^()]*\))*" />
                                      				<!-- comment out the following node to display the method with its parameters -->
                                      				<funcNameExpr expr="[A-Za-z_]\w*" />
                                      			</functionName>
                                      		</function>
                                      	</classRange>
                                      	<function
                                      		mainExpr="(?x)                                        # Utilize inline comments (see `RegEx - Pattern Modifiers`)
                                      				(?ms)
                                      				(?'SECTION_HEADER'
                                      					^                                               # header starts at beginning of a line
                                      					\[                                              # start-of-header indicator
                                      					(?-i:
                                      						Components|(?:Custom)?Messages
                                      					|	Dirs
                                      					|	Files
                                      					|	I(?:cons|nstallDelete)
                                      					|	Languages
                                      					|	R(?:egistry|un)
                                      					|	Setup
                                      					|	T(?:asks|ypes)
                                      					|	Uninstall(?:Delete|Run)
                                      					)                                               # valid section name
                                      					]                                               # end-of-header indicator
                                      				)
                                      				.*?                                               # whatever, up till...
                                      				(?=
                                      					(?&amp;SECTION_HEADER)                          # ...next valid section header,...
                                      				|	^\[(?-i:Code)]                                  # ...`Code` section header or...
                                      				|	\Z                                              # ...end-of-file
                                      				)
                                      			"
                                      	>
                                      		<functionName>
                                      			<nameExpr expr="^\[\K[^\]]+(?=])" />
                                      		</functionName>
                                      	</function>
                                      </parser>
                                      
                                      1 條回覆 最後回覆 回覆 引用 0
                                      • Alexander SchikoraA
                                        Alexander Schikora
                                        最後由 Alexander Schikora 編輯

                                        doesn’t work anymore for 7.4.2, why is this even an issue? this is the most basic ui test possible, very disappointing. But looking at the “new” xml structure, no wonder people have problems navigating to this custom xml interpretation.
                                        Switching ID to 19, even though a random comment says not to, fixed this for me…

                                        1 條回覆 最後回覆 回覆 引用 0
                                        • t12122013 FinkT
                                          t12122013 Fink
                                          最後由 t12122013 Fink 編輯

                                          `
                                          <parser
                                          displayName=“JavaScript”
                                          id =“javascript_function”
                                          commentExpr=“(?s:/.?*/)|(?m-s://.*?$)”

                                          	bemerkung1="für Kommentar zwischen function header und {. [\n\s]*\{ am Ende gelöscht."
                                          	bemerkung2="für new Function(...)  (?:new\s*)? eingefügt."
                                          	bemerkung3="für function (a,b,c) ohne Funktionsname ein \s* eingefügt."
                                          
                                            comment1="comment between function header and function body {, removed [\n\s]*\{"
                                            comment2="new Function() : inserted (?:new\s*)? "
                                            comment3="function (a,b,c) without function name: inserted \s*"
                                            comment4="comment within function header still not recognized. e.g. function /*returns real*/ a(b) { }"
                                              comment99="there must be something wrong with processing of commentExpr"
                                          	
                                          >
                                          <function
                                             	mainExpr="((^|\s+|[;\}\.])([A-Za-z_]\w*\.)*[A-Za-z_]\w*\s*[=:]|^|[\s;\}]+)\s*(?:new\s*)?function(\s+[A-Za-z_]?\w*\s*\([^\)\(]*\)|s*\([^\)\(]*\))"
                                          			
                                          			
                                                >
                                              <functionName>
                                                  <nameExpr expr="[A-Za-z_]\w*\s*[=:]|[A-Za-z_]?\w*\s*\(" />
                                                  <nameExpr expr="[A-Za-z_]?\w*" />
                                              </functionName>
                                              <className>
                                                  <nameExpr expr="([A-Za-z_]\w*\.)*[A-Za-z_]\w*\." />
                                                  <nameExpr expr="([A-Za-z_]\w*\.)*[A-Za-z_]\w*" />
                                              </className>
                                          </function>
                                            </parser>`
                                          
                                          1 條回覆 最後回覆 回覆 引用 0
                                          • t12122013 FinkT
                                            t12122013 Fink
                                            最後由 t12122013 Fink 編輯

                                            trying again, by content and by form

                                            <parser
                                            displayName="JavaScript"
                                            id         ="javascript_function"
                                            	XcommentExpr="(?s:/\*.*?\*/)|(?m-s://.*?$)"
                                            
                                            	
                                            	bemerkung1="für Kommentar zwischen function header und {. [\n\s]*\{ am Ende gelöscht."
                                            	bemerkung2="für new Function(...)  (?:new\s*)? eingefügt."
                                            	bemerkung3="für function (a,b,c) ohne Funktionsname ein \s* eingefügt."
                                            	bemerkung4="Kommentar im Funktionsheader wird nicht behandelt, z.B. function /*returns real*/ a(b) { } "
                                            	bemerkung5="commentExpr überhaupt X-ed."
                                            	bemerkung99="Es muss etwas falsch sein mit commentExpr durch nichts ersetzen."
                                            	
                                            	comment1="Comment between function header and function body {: removed [\n\s]*\{ "
                                            comment2="new Function(): inserted (?:new\s*)? "
                                            comment3="function (a,b,c) without function name: inserted \s*" 
                                            comment4="Comment within function header still not handled. e.g. function /*returns real*/ a(b) { } "
                                            	comment5="commentExpr disabled: X-ed."
                                            comment99="There must be something wrong in NPP when replacing commentExpr by nothing."
                                            	
                                            >
                                            <function
                                               	mainExpr="((^|\s+|[;\}\.])([A-Za-z_]\w*\.)*[A-Za-z_]\w*\s*[=:]|^|[\s;\}]+)\s*(?:new\s*)?function(\s+[A-Za-z_]?\w*\s*\([^\)\(]*\)|s*\([^\)\(]*\))"
                                            >
                                                <functionName>
                                                    <nameExpr expr="[A-Za-z_]\w*\s*[=:]|[A-Za-z_]?\w*\s*\(" />
                                                    <nameExpr expr="[A-Za-z_]?\w*" />
                                                </functionName>
                                                <className>
                                                    <nameExpr expr="([A-Za-z_]\w*\.)*[A-Za-z_]\w*\." />
                                                    <nameExpr expr="([A-Za-z_]\w*\.)*[A-Za-z_]\w*" />
                                                </className>
                                            </function>
                                            </parser>
                                            
                                            1 條回覆 最後回覆 回覆 引用 0
                                            • 第一個貼文
                                              最後的貼文
                                            The Community of users of the Notepad++ text editor.
                                            Powered by NodeBB | Contributors