Esempio n. 1
0
def shellExtractor(file):
    """
    Extract comments from Shell file.
    :param file: File to scan
    :type file: string
    :return: Scan output
    :rtype: ScanOutput
    """
    result = CommentSyntax()
    single_line_comment = result.hash(file)
    cont_single_line_comment = contSingleLines(single_line_comment)
    file = file.split("/")
    output = ScanOutput()
    output.filename = file[-1]
    output.lang = "Shell"
    output.total_lines = single_line_comment[1]
    output.total_lines_of_comments = single_line_comment[3]
    output.blank_lines = single_line_comment[2]

    if cont_single_line_comment:
        single_line_comment = cont_single_line_comment[0]

    for i in single_line_comment[0]:
        output.single_line_comment.append(SingleLine(i[0], i[1]))

    for idx, _ in enumerate(cont_single_line_comment[1]):
        output.cont_single_line_comment.append(
            MultiLine(
                cont_single_line_comment[1][idx],
                cont_single_line_comment[2][idx],
                cont_single_line_comment[3][idx],
            ))

    return output
Esempio n. 2
0
    def test_outputFormat(self):
        """
        Check for the output format correctness.
        """
        regex = r"""(?<!["'`])#+\s*(.*)"""
        syntax_start = "=begin"
        syntax_end = "=cut"
        expected = perl.perlExtractor(self.testfile).get_dict()
        comment_single = readSingleLine(self.testfile, regex)
        comment_multiline = readMultiLineDiff(self.testfile, syntax_start, syntax_end)
        comment_contSingleline = contSingleLines(comment_single)
        file = self.testfile.split("/")
        output = {
            "metadata": {
                "filename": file[-1],
                "lang": "Perl",
                "total_lines": comment_single[1],
                "total_lines_of_comments": comment_single[3] + comment_multiline[3],
                "blank_lines": comment_single[2],
                "sloc": comment_single[1] - (comment_single[3] + comment_multiline[3] + comment_single[2]),
            },
            "single_line_comment": [],
            "cont_single_line_comment": [],
            "multi_line_comment": [],
        }

        if comment_contSingleline:
            comment_single = comment_contSingleline[0]

        if comment_single:
            for i in comment_single[0]:
                output["single_line_comment"].append(
                    {"line_number": i[0], "comment": i[1]}
                )

        if comment_contSingleline:
            for idx, _ in enumerate(comment_contSingleline[1]):
                output["cont_single_line_comment"].append(
                    {
                        "start_line": comment_contSingleline[1][idx],
                        "end_line": comment_contSingleline[2][idx],
                        "comment": comment_contSingleline[3][idx],
                    }
                )

        if comment_multiline:
            for idx, _ in enumerate(comment_multiline[0]):
                output["multi_line_comment"].append(
                    {
                        "start_line": comment_multiline[0][idx],
                        "end_line": comment_multiline[1][idx],
                        "comment": comment_multiline[2][idx],
                    }
                )

        self.assertEqual(output, expected)
Esempio n. 3
0
 def test_output(self):
     """
     Check for the scan correctness.
     """
     regex = r"""(?<!["'`])#+\s*(.*)"""
     syntax_start = "=begin"
     syntax_end = "=cut"
     comment_single = readSingleLine(self.testfile, regex)
     comment_multiline = readMultiLineDiff(self.testfile, syntax_start, syntax_end)
     comment_contSingleline = contSingleLines(comment_single)
     self.assertTrue(comment_single)
     self.assertTrue(comment_multiline)
     self.assertTrue(comment_contSingleline)
Esempio n. 4
0
 def test_output(self):
     """
     Check for the scan correctness.
     """
     regex = r"""(?<![pst'"`]:)\/\/\s*(.*)"""
     syntax_start = "/*"
     syntax_end = "*/"
     comment_single = readSingleLine(self.testfile, regex)
     comment_multiline = readMultiLineDiff(self.testfile, syntax_start,
                                           syntax_end)
     comment_contSinglelines = contSingleLines(comment_single)
     self.assertTrue(comment_single)
     self.assertTrue(comment_multiline)
     self.assertTrue(comment_contSinglelines)
Esempio n. 5
0
 def test_output(self):
     """
     Check for the scan correctness.
     """
     regex = r"""(?<!["'`])#+\s*(.*)"""
     syntax_single = "'''"
     syntax_double = '"""'
     comment_multi_single = readMultiLineSame(self.testfile, syntax_single)
     comment_single = readSingleLine(self.testfile, regex)
     comment_multi_double = readMultiLineSame(self.testfile, syntax_double)
     comment_contSingleline = contSingleLines(comment_single)
     self.assertTrue(comment_single)
     self.assertTrue(comment_multi_single)
     self.assertTrue(comment_multi_double)
     self.assertTrue(comment_contSingleline)
Esempio n. 6
0
def cExtractor(file):
    """
    Extract comments from C file.
    :param file: File to scan
    :type file: string
    :return: Scan output
    :rtype: ScanOutput
    """
    result = CommentSyntax()
    single_line_comment = result.doubleSlash(file)
    multiline_comment = result.slashStar(file)
    cont_single_line_comment = contSingleLines(single_line_comment)
    file = file.split("/")
    output = ScanOutput()
    output.filename = file[-1]
    output.lang = "C"
    output.total_lines = single_line_comment[1]
    output.total_lines_of_comments = single_line_comment[
        3] + multiline_comment[3]
    output.blank_lines = single_line_comment[2]

    if cont_single_line_comment:
        single_line_comment = cont_single_line_comment[0]

    for i in single_line_comment[0]:
        output.single_line_comment.append(SingleLine(i[0], i[1]))

    for idx, _ in enumerate(cont_single_line_comment[1]):
        output.cont_single_line_comment.append(
            MultiLine(
                cont_single_line_comment[1][idx],
                cont_single_line_comment[2][idx],
                cont_single_line_comment[3][idx],
            ))

    try:
        for idx, _ in enumerate(multiline_comment[0]):
            output.multi_line_comment.append(
                MultiLine(
                    multiline_comment[0][idx],
                    multiline_comment[1][idx],
                    multiline_comment[2][idx],
                ))
    except BaseException:
        pass

    return output
Esempio n. 7
0
def matlabExtractor(file):
    """
    Extract comments from MATLAB file.
    :param file: File to scan
    :type file: string
    :return: Scan output
    :rtype: ScanOutput
    """
    result = CommentSyntax()
    single_line_comment = result.percentage(file)
    multiline_comment = result.percentageCurlybraces(file)
    cont_single_line_comment = contSingleLines(single_line_comment)
    file = file.split("/")
    output = ScanOutput()
    output.filename = file[-1]
    output.lang = "MATLAB"
    output.total_lines = single_line_comment[1]
    output.total_lines_of_comments = single_line_comment[3] + multiline_comment[3]
    output.blank_lines = single_line_comment[2]

    if cont_single_line_comment:
        single_line_comment = cont_single_line_comment[0]

    for i in single_line_comment[0]:
        output.single_line_comment.append(SingleLine(i[0], i[1]))

    for idx, _ in enumerate(cont_single_line_comment[1]):
        output.cont_single_line_comment.append(
            MultiLine(
                cont_single_line_comment[1][idx],
                cont_single_line_comment[2][idx],
                cont_single_line_comment[3][idx],
            )
        )

    for idx, _ in enumerate(multiline_comment[0]):
        output.multi_line_comment.append(
            MultiLine(
                multiline_comment[0][idx],
                multiline_comment[1][idx],
                multiline_comment[2][idx],
            )
        )

    return output
Esempio n. 8
0
    def test_outputFormat(self):
        regex = r'''(\/\/\s*[\w #\.()@+-_*\d]*)'''
        self.syntax_start = "/*"
        self.syntax_end ='*/'
        sign = '//'
        expected = cpp.cppExtractor(self.testfile)
        comment_single = readSingleLine(self.testfile,regex,sign)
        comment_multiline = readMultiLineDiff(self.testfile,self.syntax_start,self.syntax_end)
        comment_contSingleline = contSingleLines(comment_single)
        file = self.testfile.split("/")
        output = {
        "metadata": [{
        "filename": file[-1],
        "lang": "C++",
        "total_lines": comment_single[1],
        "total_lines_of_comments": comment_single[3]+comment_multiline[3],
        "blank_lines": comment_single[2],
        "sloc": comment_single[1]-(comment_single[3]+comment_multiline[3]+comment_single[2])
        }],
        "single_line_comment": [],
        "cont_single_line_comment": [],
        "multi_line_comment": []
        }

        if comment_contSingleline:
            comment_single = comment_contSingleline[0]

        if comment_single:
            for i in comment_single[0]:
                output['single_line_comment'].append({"line_number" :i[0],"comment": i[1]})

        if comment_contSingleline:
            for idx,i in enumerate(comment_contSingleline[1]):
                output['cont_single_line_comment'].append({"start_line": comment_contSingleline[1][idx], "end_line": comment_contSingleline[2][idx], "comment": comment_contSingleline[3][idx]})

        if comment_multiline:
            try:
                for idx,i in enumerate(comment_multiline[0]):
                    output['multi_line_comment'].append({"start_line": comment_multiline[0][idx], "end_line": comment_multiline[1][idx], "comment": comment_multiline[2][idx]})
            except:
                pass

        self.assertEqual(output,expected)