Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

uast_extract does not allow to extract nested properties #702

Open
erizocosmico opened this issue Feb 19, 2019 · 6 comments
Open

uast_extract does not allow to extract nested properties #702

erizocosmico opened this issue Feb 19, 2019 · 6 comments
Labels
blocked Some other issue is blocking this bug Something isn't working feature

Comments

@erizocosmico
Copy link
Contributor

There is currently no way to allow extraction of nested properties of a node, which would be useful for getting, for example, the line and column of the position.

@ajnavarro ajnavarro added bug Something isn't working feature labels Feb 19, 2019
@kuba--
Copy link
Contributor

kuba-- commented Feb 28, 2019

it should be done with
#701

@kuba-- kuba-- self-assigned this Feb 28, 2019
@kuba--
Copy link
Contributor

kuba-- commented Feb 28, 2019

It's doable, but we have to discuss in what format we want to return extracted data.
Here is a one big object in json:

[
    {
        "@pos": {
            "@type": "uast:Positions",
            "end": {
                "@type": "uast:Position",
                "col": 8,
                "line": 4,
                "offset": 31
            },
            "start": {
                "@type": "uast:Position",
                "col": 5,
                "line": 4,
                "offset": 28
            }
        },
        "@role": [
            "Function",
            "Declaration",
            "Name",
            "Identifier"
        ],
        "@token": "sum",
        "@type": "FunctionDef",
        "args": {
            "@pos": {
                "@type": "uast:Positions"
            },
            "@role": [
                "Function",
                "Declaration",
                "Argument",
                "Incomplete"
            ],
            "@type": "arguments",
            "args": [
                {
                    "@pos": {
                        "@type": "uast:Positions",
                        "end": {
                            "@type": "uast:Position",
                            "col": 10,
                            "line": 4,
                            "offset": 33
                        },
                        "start": {
                            "@type": "uast:Position",
                            "col": 9,
                            "line": 4,
                            "offset": 32
                        }
                    },
                    "@role": [
                        "Function",
                        "Declaration",
                        "Argument",
                        "Name"
                    ],
                    "@token": "a",
                    "@type": "arg",
                    "annotation": null,
                    "noops_previous": {
                        "@pos": {
                            "@type": "uast:Positions",
                            "end": {
                                "@type": "uast:Position",
                                "col": 1,
                                "line": 3,
                                "offset": 23
                            },
                            "start": {
                                "@type": "uast:Position",
                                "col": 1,
                                "line": 1,
                                "offset": 0
                            }
                        },
                        "@role": [
                            "Noop"
                        ],
                        "@type": "PreviousNoops",
                        "lines": [
                            {
                                "@pos": {
                                    "@type": "uast:Positions",
                                    "start": {
                                        "@type": "uast:Position",
                                        "col": 1,
                                        "line": 2,
                                        "offset": 1
                                    }
                                },
                                "@role": [
                                    "Comment",
                                    "Noop"
                                ],
                                "@token": "#!/usr/bin/env python\\n",
                                "@type": "NoopLine"
                            }
                        ]
                    }
                },
                {
                    "@pos": {
                        "@type": "uast:Positions",
                        "end": {
                            "@type": "uast:Position",
                            "col": 13,
                            "line": 4,
                            "offset": 36
                        },
                        "start": {
                            "@type": "uast:Position",
                            "col": 12,
                            "line": 4,
                            "offset": 35
                        }
                    },
                    "@role": [
                        "Function",
                        "Declaration",
                        "Argument",
                        "Name"
                    ],
                    "@token": "b",
                    "@type": "arg",
                    "annotation": null
                }
            ]
        },
        "body": {
            "@role": [
                "Function",
                "Declaration",
                "Body"
            ],
            "@type": "FunctionDef.body",
            "body_stmts": [
                {
                    "@pos": {
                        "@type": "uast:Positions",
                        "end": {
                            "@type": "uast:Position",
                            "col": 8,
                            "line": 5,
                            "offset": 46
                        },
                        "start": {
                            "@type": "uast:Position",
                            "col": 2,
                            "line": 5,
                            "offset": 40
                        }
                    },
                    "@role": [
                        "Return",
                        "Statement"
                    ],
                    "@token": "return",
                    "@type": "Return",
                    "value": {
                        "@pos": {
                            "@type": "uast:Positions",
                            "start": {
                                "@type": "uast:Position",
                                "col": 9,
                                "line": 5,
                                "offset": 47
                            }
                        },
                        "@role": [
                            "Expression",
                            "Binary"
                        ],
                        "@type": "BinOp",
                        "left": {
                            "@pos": {
                                "@type": "uast:Positions",
                                "end": {
                                    "@type": "uast:Position",
                                    "col": 10,
                                    "line": 5,
                                    "offset": 48
                                },
                                "start": {
                                    "@type": "uast:Position",
                                    "col": 9,
                                    "line": 5,
                                    "offset": 47
                                }
                            },
                            "@role": [
                                "Identifier",
                                "Expression",
                                "Binary",
                                "Left"
                            ],
                            "@token": "a",
                            "@type": "Name",
                            "ctx": "Load"
                        },
                        "op": {
                            "@pos": {
                                "@type": "uast:Positions"
                            },
                            "@role": [
                                "Operator",
                                "Arithmetic",
                                "Add",
                                "Binary"
                            ],
                            "@token": "+",
                            "@type": "Add"
                        },
                        "right": {
                            "@pos": {
                                "@type": "uast:Positions",
                                "end": {
                                    "@type": "uast:Position",
                                    "col": 14,
                                    "line": 5,
                                    "offset": 52
                                },
                                "start": {
                                    "@type": "uast:Position",
                                    "col": 13,
                                    "line": 5,
                                    "offset": 51
                                }
                            },
                            "@role": [
                                "Identifier",
                                "Expression",
                                "Binary",
                                "Right"
                            ],
                            "@token": "b",
                            "@type": "Name",
                            "ctx": "Load"
                        }
                    }
                }
            ]
        },
        "decorator_list": {
            "@role": [
                "Function",
                "Declaration",
                "Incomplete"
            ],
            "@type": "FunctionDef.decorators",
            "decorators": []
        },
        "returns": null
    },
    {
        "@pos": {
            "@type": "uast:Positions",
            "end": {
                "@type": "uast:Position",
                "col": 10,
                "line": 5,
                "offset": 48
            },
            "start": {
                "@type": "uast:Position",
                "col": 9,
                "line": 5,
                "offset": 47
            }
        },
        "@role": [
            "Identifier",
            "Expression",
            "Binary",
            "Left"
        ],
        "@token": "a",
        "@type": "Name",
        "ctx": "Load"
    },
    {
        "@pos": {
            "@type": "uast:Positions",
            "end": {
                "@type": "uast:Position",
                "col": 14,
                "line": 5,
                "offset": 52
            },
            "start": {
                "@type": "uast:Position",
                "col": 13,
                "line": 5,
                "offset": 51
            }
        },
        "@role": [
            "Identifier",
            "Expression",
            "Binary",
            "Right"
        ],
        "@token": "b",
        "@type": "Name",
        "ctx": "Load"
    },
    {
        "@pos": {
            "@type": "uast:Positions",
            "end": {
                "@type": "uast:Position",
                "col": 10,
                "line": 7,
                "offset": 63
            },
            "start": {
                "@type": "uast:Position",
                "col": 7,
                "line": 7,
                "offset": 60
            }
        },
        "@role": [
            "Identifier",
            "Expression",
            "Call",
            "Callee"
        ],
        "@token": "sum",
        "@type": "Name",
        "ctx": "Load"
    },
    {
        "@pos": {
            "@type": "uast:Positions",
            "end": {
                "@type": "uast:Position",
                "col": 6,
                "line": 7,
                "offset": 59
            },
            "start": {
                "@type": "uast:Position",
                "col": 1,
                "line": 7,
                "offset": 54
            }
        },
        "@role": [
            "Identifier",
            "Expression",
            "Call",
            "Callee"
        ],
        "@token": "print",
        "@type": "Name",
        "ctx": "Load",
        "noops_previous": {
            "@pos": {
                "@type": "uast:Positions",
                "end": {
                    "@type": "uast:Position",
                    "col": 1,
                    "line": 6,
                    "offset": 53
                },
                "start": {
                    "@type": "uast:Position",
                    "col": 1,
                    "line": 6,
                    "offset": 53
                }
            },
            "@role": [
                "Noop"
            ],
            "@type": "PreviousNoops",
            "lines": []
        }
    }
]

@erizocosmico
Copy link
Contributor Author

Same as we're retuning now, right? As for the syntax, maybe jsonpath? we already use it in JSON_EXTRACT UDF.

@kuba--
Copy link
Contributor

kuba-- commented Mar 1, 2019

@erizocosmico - this is what we get from bblfsh (whole node) converted to json. But the question is about extract. So far, extract returns a slice of all extracted sub-node values, e.g.:

["FunctionDef","Name","Name","Name","Name"]

["sum","a","b","sum","print"]

[["Function","Declaration","Name","Identifier"],["Identifier","Expression","Binary","Left"],["Identifier","Expression","Binary","Right"],["Identifier","Expression","Call","Callee"],["Identifier","Expression","Call","Callee"]]

@kuba-- kuba-- added the blocked Some other issue is blocking this label Mar 1, 2019
@kuba-- kuba-- removed their assignment May 14, 2019
@erizocosmico
Copy link
Contributor Author

@ajnavarro what shall we do with this?

@ajnavarro
Copy link
Contributor

I would leave it here just to have it in mind.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
blocked Some other issue is blocking this bug Something isn't working feature
Projects
None yet
Development

No branches or pull requests

3 participants