we don't need to track lines and columns
abstract some functionality into a shared function
make it export to both variable and module