
Security News
The Hidden Blast Radius of the Axios Compromise
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.
cdocparser
Advanced tools
CDocParser is a language agnostic C and ///-Style comments parser that uses block and line comments to make it easier to generate documentation.
$ npm install --save cdocparser
CDocParser consists of two parts the CommentExtractor and a CommentParser.
var CDocParser = require('cdocparser');
var extractor = new CDocParser.CommentExtractor(/* contextParser */ );
var parser = new CDocParser.CommentParser(/* Annotations */);
var comments = extractor.extract(/* code */);
var parsedComments = parser.parse(comments);
console.log(parsedComments);
The ComemntExtractor is used to extract C and ///-Style comments from source and attach context information to it.
new CommentExtractor(contextParser, [opts])Create a CommentExtractor to extract block comment like:
/**
*
* CDocComment
*
*/
You need to pass in a function that is used to generate a context object used to specify the context of the comment.
A context obj:
{
type : 'contextType'
}
The type attribute is mandatory, you can add as much attributes as you would like.
To support custom comment formats set lineCommentStyle and/or blockCommentStyle in the opts argument, shown here with default values:
new CommentExtractor(contextParser, {
lineComment: true,
blockComment: true,
lineCommentStyle: '///',
blockCommentStyle: '/**'
})
The default regex can be found in index.js (var defaultDocCommentRegEx = ...).
#extract(code)This method will return an Array of all comments in the form of
[
{
lines: [],
type: 'block|line|poster',
commentRange: { start : 1, end : 2 },
context: [context object generated by contextParser]
}
]
new CommentParser(annotations, config)Create a new CommentParser where annotations is an object like:
{
_: {
alias: {
'aliasName': 'aRealAnnotation'
}
},
aRealAnnotation: {
parse : function (annotationLine, info, id) {
},
default : function(){
return 5;
}
}
}
This object is used to provide parser for various types of annotations. It also includes tha ability to include aliases.
#parse ( comments [, id ])This methods takes a comments array provided by CommentExtractor#extract and parses all annotations. The resulting
object will look like:
{
"[context.type]" : [
{
description : "[Contains all comment lines without an annotation]",
commentRange : { start : [start], end : [end] },
[annotationName] : [resultOfAnnotationParser]
}
]
}
The annotations object is build up from two different kind of object. A annotation object and a
alias.
The global structure looks like:
{
_ : {
[alias object]
},
[annotation object],
[annotation object]
}
annotation objectname : {
parse : function(line, info, id){
},
autofill : function(comment){
},
default : function(comment){
},
multiple : true,
overwritePoster : true
}
Each annotation must have a parse method, optionally you can have a default and extend methods. The optional multiple key is used to indicate if an annotation can be used multiple times.
parse methodThe parse method is used to parse the actual string after the @name. All values returned from that method
will be wrapped in an array.
Implementing a name annotation:
/**
* @name Fabrice Weinberg
*/
function(line){
return {
name : line
}
}
default methodThe default method is used to add a default value.
function(comment){
return [{
name : 'Default Name'
}]
}
Note: Please keep in mind that you need to wrap values in an Array to align with hand written annotations
autofill methodThe autofill method is used to extend hand written annotations by autofilled ones.
function(comment){
// Access the parsed comment here.
}
Note: Extended annotations can be disabled by using the
@allowExtendannotation.
multiple keyThe multiple key is used to determine if this can be used mutliple times per comment.
Note: A warning will be emitted if a annotation is used more than once. Only the first value is used.
overwritePoster keyThe overwritePoster key is used to control if a this annotation used on an item will overwrite a poster comment.
Use mocha test to run the unit tests.
lineCommentStyle match to the beginning of a line. (See PR#17)multiple:false case meta-information where included in annotation.parse.id passed to parse method in every annotation.parse call.\r\n) to \n before processinglineComment and blockComment as boolean states to disbale parsing of either of them.id string to the parse function. Used for error reporting.indexBy and indexByType to restore the previous behaviour.commentRange in object returned by the annotation parser.lineNumberFor reporting wrong line numbers.lineCommentStyle and blockCommentStyle. (See PR#8)type key of each comment to differentiate between line and block.multiple key, to indicate if a annotation can be used more than once per comment.autofill as an annotation feature.default values.0.3.5 and 0.3.6default as value.default functionallowedOn key to annotations to only apply them to comments from a specific type/// commentslineNumberFor function as a second parameter that will convert char indices to line numbersposter comment to apply annotations to all items in the file that are documented.warning if you use more than on poster comment per file. Only the first one will be used.warning if a annotation was not found instead of throwing an exception.undefined.default value and parse function.FAQs
Extract C style comments and extract context from source
The npm package cdocparser receives a total of 15,379 weekly downloads. As such, cdocparser popularity was classified as popular.
We found that cdocparser demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.