# Parsing a Julia file

**URL:** https://discourse.julialang.org/t/parsing-a-julia-file/32622
**Category:** General Usage
**Created:** [December 23, 2019, 1:36pm UTC](https://discourse.julialang.org/t/parsing-a-julia-file/32622 "2019-12-23T13:36:28Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![cstjean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cstjean/32/1444_2.png) [@cstjean](https://discourse.julialang.org/u/cstjean)
#### Post date: [December 23, 2019, 1:36pm UTC](https://discourse.julialang.org/t/parsing-a-julia-file/32622/1 "2019-12-23T13:36:28Z")

</div>

How can I parse a `.jl` file into a `Vector{Expr}`, similar to what `include` does (but without executing of course). I expected `Meta.parse` to accept an `IO`, but it doesn’t.

---

<div class="post-metadata">

### Author: ![visr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/visr/32/17204_2.png) [@visr](https://discourse.julialang.org/u/visr)
#### Post date: [December 23, 2019, 3:15pm UTC](https://discourse.julialang.org/t/parsing-a-julia-file/32622/2 "2019-12-23T15:15:39Z")

</div>

Not sure if this is the best way, but I have personally used

```julia
parsefile(file) = parse(join(["quote", readstring(file), "end"], ";"))

```

If you take the `.args[1].args`, you have a `Vector{Expr}` of everything.

---

<div class="post-metadata">

### Author: ![cstjean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cstjean/32/1444_2.png) [@cstjean](https://discourse.julialang.org/u/cstjean)
#### Post date: [December 23, 2019, 6:36pm UTC](https://discourse.julialang.org/t/parsing-a-julia-file/32622/3 "2019-12-23T18:36:58Z")

</div>

Thanks, that’s a good solution. I ended up with

```julia
parsecode(code::String)::Vector =
    # https://discourse.julialang.org/t/parsing-a-julia-file/32622
    filter(x->!(x isa LineNumberNode),
           Meta.parse(join(["quote", code, "end"], ";")).args[1].args)

```

---

<div class="post-metadata">

### Author: ![jw3126](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jw3126/32/3086_2.png) [@jw3126](https://discourse.julialang.org/u/jw3126)
#### Post date: [November 1, 2022, 7:48am UTC](https://discourse.julialang.org/t/parsing-a-julia-file/32622/4 "2022-11-01T07:48:47Z")

</div>

One drawback of this approach is that it looses all location information from the file. E.g. line-numbers and filename. Is there a way to keep that information?

---

<div class="post-metadata">

### Author: ![jar1](https://avatars.discourse-cdn.com/v4/letter/j/c0e974/32.png) [@jar1](https://discourse.julialang.org/u/jar1)
#### Post date: [November 1, 2022, 7:53am UTC](https://discourse.julialang.org/t/parsing-a-julia-file/32622/5 "2022-11-01T07:53:18Z")

</div>

> **[GitHub - JuliaLang/JuliaSyntax.jl: A Julia frontend, written in Julia](https://github.com/JuliaLang/JuliaSyntax.jl)**
>
> A Julia frontend, written in Julia. Contribute to JuliaLang/JuliaSyntax.jl development by creating an account on GitHub.
