@@ -22,13 +22,22 @@ const addOptionRE = /AddOption[\s\n\r]*\([\s\n\r]*"([^"]+)"(.*?)\);/gs;
2222const nodeOptionsText = cliText . match ( / < ! - - n o d e - o p t i o n s - n o d e s t a r t - - > ( .* ) < ! - - n o d e - o p t i o n s - o t h e r s e n d - - > / s) [ 1 ] ;
2323const v8OptionsText = cliText . match ( / < ! - - v 8 - o p t i o n s s t a r t - - > ( .* ) < ! - - v 8 - o p t i o n s e n d - - > / s) [ 1 ] ;
2424
25+ const manPage = path . join ( rootDir , 'out' , 'doc' , 'node.1' ) ;
26+ const manPageText = fs . readFileSync ( manPage , { encoding : 'utf8' } ) ;
27+
2528// Documented in /doc/api/deprecations.md
2629const deprecated = [
2730 '--debug' ,
2831 '--debug-brk' ,
2932] ;
3033
3134
35+ const manPagesOptions = new Set ( ) ;
36+
37+ for ( const [ , envVar ] of manPageText . matchAll ( / \. I t F l ( - [ a - z A - Z 0 - 9 . _ - ] + ) / g) ) {
38+ manPagesOptions . add ( envVar ) ;
39+ }
40+
3241for ( const [ , envVar , config ] of nodeOptionsCC . matchAll ( addOptionRE ) ) {
3342 const hasTrueAsDefaultValue = / , \s * (?: t r u e | H A V E _ [ A - Z _ ] + ) \s * $ / . test ( config ) ;
3443 const isInNodeOption = config . includes ( 'kAllowedInEnvvar' ) && ! config . includes ( 'kDisallowedInEnvvar' ) ;
@@ -41,18 +50,22 @@ for (const [, envVar, config] of nodeOptionsCC.matchAll(addOptionRE)) {
4150 isNoOp
4251 ) {
4352 // assert(!manPagesOptions.has(envVar.slice(1)), `Option ${envVar} should not be documented`)
53+ manPagesOptions . delete ( envVar . slice ( 1 ) ) ;
4454 continue ;
4555 }
4656
4757 // Internal API options are documented in /doc/contributing/internal-api.md
4858 if ( new RegExp ( `####.*\`${ RegExp . escape ( envVar ) } [[=\\s\\b\`]` ) . test ( internalApiText ) ) {
59+ manPagesOptions . delete ( envVar . slice ( 1 ) ) ;
4960 continue ;
5061 }
5162
5263 // CLI options
5364 if ( ! isV8Option && ! hasTrueAsDefaultValue ) {
5465 if ( ! new RegExp ( `###.*\`${ RegExp . escape ( envVar ) } [[=\\s\\b\`]` ) . test ( cliText ) ) {
5566 assert . fail ( `Should have option ${ envVar } documented` ) ;
67+ } else {
68+ manPagesOptions . delete ( envVar . slice ( 1 ) ) ;
5669 }
5770 }
5871
@@ -63,6 +76,8 @@ for (const [, envVar, config] of nodeOptionsCC.matchAll(addOptionRE)) {
6376 if ( ! isV8Option && hasTrueAsDefaultValue ) {
6477 if ( ! new RegExp ( `###.*\`--no${ RegExp . escape ( envVar . slice ( 1 ) ) } [[=\\s\\b\`]` ) . test ( cliText ) ) {
6578 assert . fail ( `Should have option --no${ envVar . slice ( 1 ) } documented` ) ;
79+ } else {
80+ manPagesOptions . delete ( `-no${ envVar . slice ( 1 ) } ` ) ;
6681 }
6782 }
6883
@@ -84,6 +99,8 @@ for (const [, envVar, config] of nodeOptionsCC.matchAll(addOptionRE)) {
8499 if ( isV8Option ) {
85100 if ( ! new RegExp ( `###.*\`${ RegExp . escape ( envVar ) } [[=\\s\\b\`]` ) . test ( v8OptionsText ) ) {
86101 assert . fail ( `Should have option ${ envVar } in V8 options documented` ) ;
102+ } else {
103+ manPagesOptions . delete ( envVar . slice ( 1 ) ) ;
87104 }
88105 }
89106}
@@ -102,3 +119,8 @@ for (const [, envVar, config] of nodeOptionsCC.matchAll(addOptionRE)) {
102119 previousIndex = match ?. index ;
103120 } while ( match ) ;
104121}
122+
123+ // add alias handling
124+ manPagesOptions . delete ( '-trace-events-enabled' ) ;
125+
126+ assert . strictEqual ( manPagesOptions . size , 0 , `Man page options not documented: ${ [ ...manPagesOptions ] } ` ) ;
0 commit comments