I have a case of cyclical compile time dependencies. I have read lotβs about it and watched the great video on youtube.
Updating a View or Controller or many other files causes a 70 module recompile. I have discovered that my extensive (ab)use of controller level plugs is one cause, but there are others, such as an over-imported ViewHelpers module. I am slowly but surely removing imports, which I think is getting me closer to resolving this issue
My question is, from an xref graph
or another tool out there, is it possible to ascertain whether there is a cyclical dependency issue ? I am wondering whether I could run a check to my CI to ensure we never get into this position again.
lib/ev2_web/views/production/custom_field_view.ex
βββ lib/ev2_web.ex (compile)
βββ lib/ev2_web/router.ex
β βββ lib/ev2_web/controllers/dashboard_controller.ex
β β βββ lib/ev2_web.ex (compile)
β β βββ lib/ev2_web/controllers/data_plugs.ex (compile)
β β β βββ lib/ev2/accounts/accounts.ex
β β β β βββ lib/ev2/accounts/core_logic.ex (compile)
β β β β βββ lib/ev2/accounts/login_attempt/login_attempt_api.ex (compile)
β β β β β βββ lib/ev2/accounts/accounts.ex
β β β β β βββ lib/ev2/accounts/login_attempt/login_attempt.ex (struct)
β β β β β β βββ lib/ev2/accounts/user/user.ex
β β β β β β βββ lib/ev2/accounts/login_attempt/login_attempt.ex
β β β β β β βββ lib/ev2/accounts/role/project_role.ex
β β β β β β β βββ lib/ev2/accounts/role/role.ex
β β β β β β β β βββ lib/ev2/accounts/role/permission.ex
β β β β β β β β βββ lib/ev2/accounts/role/role.ex
β β β β β β β βββ lib/ev2/accounts/user/user.ex
β β β β β β β βββ lib/ev2/production/department/department.ex
β β β β β β β βββ lib/ev2/production/job_title/job_title.ex
β β β β β β β βββ lib/ev2/production/contract_type/contract_type.ex
β β β β β β β β βββ lib/ev2/production/job_title/job_title.ex
β β β β β β β βββ lib/ev2/production/department/department.ex
β β β β β β βββ lib/ev2/accounts/role/role.ex
β β β β β β βββ lib/ev2/accounts/startpack/startpack.ex
β β β β β β β βββ lib/ev2/accounts/user/user.ex
β β β β β β β βββ lib/ev2/ecto_types/string/trim.ex (compile)
β β β β β β β βββ lib/ev2/ecto_types/string/upcase.ex (compile)
β β β β β β β βββ lib/ev2/lib/doc_security/doc_security.ex
β β β β β β β β βββ lib/ev2/lib/doc_security/anti_virus/anti_virus.ex (compile)
β β β β β β β β βββ lib/ev2/lib/doc_security/file_type/file_type.ex (compile)
β β β β β β β βββ lib/ev2/lib/utils/changeset.ex
β β β β β β β β βββ lib/ev2/lib/doc_security/doc_security.ex
β β β β β β β β βββ lib/ev2/lib/utils.ex
β β β β β β β β βββ lib/ev2/lib/utils/time_utils.ex
β β β β β β β β βββ lib/ev2/timecards/tc_utils.ex
β β β β β β β β β βββ lib/ev2/lib/utils/time_utils.ex
β β β β β β β β β βββ lib/ev2/production/prod_utils.ex
β β β β β β β β β βββ lib/ev2/timecards/approver/approver.ex (struct)
β β β β β β β β β βββ lib/ev2/timecards/timecard/timecard.ex (struct)
β β β β β β β β β β βββ lib/ev2/lib/utils/time_utils.ex
β β β β β β β β β β βββ lib/ev2/timecards/approval/approval.ex
β β β β β β β β β β β βββ lib/ev2/timecards/approver/approver.ex
β β β β β β β β β β β βββ lib/ev2/timecards/timecard/timecard.ex
β β β β β β β β β β β βββ lib/ev2/timecards/timecard_data/timecard_data.ex
β β β β β β β β β β β βββ lib/ev2/ecto_types/string/trim.ex (compile)
β β β β β β β β β β β βββ lib/ev2/lib/utils/changeset.ex
β β β β β β β β β β β βββ lib/ev2/production/production.ex
β β β β β β β β β β β β βββ lib/ev2/production/altered_document/altered_document_api.ex (compile)
β β β β β β β β β β β β β βββ lib/ev2/production/altered_document/altered_document.ex (struct)
β β β β β β β β β β β β β β βββ lib/ev2/production/document/document.ex
β β β β β β β β β β β β β β β βββ lib/ev2/production/altered_document/altered_document.ex
β β β β β β β β β β β β β β β βββ lib/ev2/production/offer/offer.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/accounts.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/role_api.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/helpers.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/project_role.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/role.ex (struct)
β β β β β β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/permission.ex (struct)
β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/role.ex (struct)
β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/role_permission.ex (struct)
β β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/permission.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/role.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/ecto_types/string/trim.ex (compile)
β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils/changeset.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/production/altered_document/altered_document.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/production/constants.ex (compile)
β β β β β β β β β β β β β β β β βββ lib/ev2/production/contract_type/contract_type.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/production/custom_field/custom_field.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/offer/offer.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/project/project.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/ecto_types/string/trim.ex (compile)
β β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils/changeset.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/constants.ex (compile)
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/custom_field/custom_field.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/document/document.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/offer/offer.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/place/place.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/production/project/project.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/production.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/project_default/project_default.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/ecto_types/string/trim.ex (compile)
β β β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils/changeset.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/production/project/project.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/signee/signee.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils/changeset.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/production/document/document.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/production/project/project.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/vehicle/vehicle.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/ecto_types/string/trim.ex (compile)
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/company/company.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/production/vehicle/vehicle.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/project/project.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/production/department/department.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/production/department_inclusive/department_inclusive.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/production/document/document.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/production/frozen_document/frozen_document.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/offer/offer.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/production/job_title/job_title.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/production/place/place.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/production/prod_utils.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/production/production.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/production/project/project.ex
β β β β β β β β β β β β β β β βββ lib/ev2/production/project/project.ex
β β β β β β β β β β β β β β β βββ lib/ev2/production/signee/signee.ex
β β β β β β β β β β β β β β βββ lib/ev2/production/offer/offer.ex
β β β β β β β β β β β β β βββ lib/ev2/production/offer/offer.ex (struct)
β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β βββ lib/ev2/production/company/company_api.ex (compile)
β β β β β β β β β β β β β βββ lib/ev2/production/company/company.ex (struct)
β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β βββ lib/ev2/production/contract_type/contract_type_api.ex (compile)
β β β β β β β β β β β β β βββ lib/ev2/production/contract_type/contract_type.ex
β β β β β β β β β β β β β βββ lib/ev2/production/contract_type/contract_type_helpers.ex
β β β β β β β β β β β β β βββ lib/ev2/production/prod_utils.ex
β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β βββ lib/ev2/production/custom_field/custom_field_api.ex (compile)
β β β β β β β β β β β β β βββ lib/ev2/production/custom_field/custom_field.ex (struct)
β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β βββ lib/ev2/production/department/department_api.ex (compile)
β β β β β β β β β β β β β βββ lib/ev2/production/department/department.ex
β β β β β β β β β β β β β βββ lib/ev2/production/job_title/job_title.ex
β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β βββ lib/ev2/production/document/document_api.ex (compile)
β β β β β β β β β β β β β βββ lib/ev2/lib/doc_security/doc_security.ex
β β β β β β β β β β β β β βββ lib/ev2/lib/utils.ex
β β β β β β β β β β β β β βββ lib/ev2/production/document/document.ex (struct)
β β β β β β β β β β β β β βββ lib/ev2/production/production.ex
β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β βββ lib/ev2/production/document_signee/document_signee_api.ex (compile)
β β β β β β β β β β β β β βββ lib/ev2/production/document_signee/document_signee.ex (struct)
β β β β β β β β β β β β β β βββ lib/ev2/production/document/document.ex
β β β β β β β β β β β β β β βββ lib/ev2/production/signee/signee.ex
β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β βββ lib/ev2/production/frozen_document/frozen_document_api.ex (compile)
β β β β β β β β β β β β β βββ lib/ev2/production/frozen_document/frozen_document.ex
β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β βββ lib/ev2/production/job_title/job_title_api.ex (compile)
β β β β β β β β β β β β β βββ lib/ev2/production/job_title/job_title.ex
β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β βββ lib/ev2/production/offer/offer_api.ex (compile)
β β β β β β β β β β β β β βββ lib/ev2/accounts/accounts.ex
β β β β β β β β β β β β β βββ lib/ev2/accounts/role/role_api.ex
β β β β β β β β β β β β β βββ lib/ev2/accounts/user/user.ex (struct)
β β β β β β β β β β β β β βββ lib/ev2/engagement/engagements.ex
β β β β β β β β β β β β β β βββ lib/ev2/engagement/eng_utils.ex (compile)
β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils/time_utils.ex
β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecards.ex
β β β β β β β β β β β β β β β βββ lib/ev2/timecards/approval/approval_api.ex (compile)
β β β β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/approval/approval.ex (struct)
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/approval/validate.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/approver/approver.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecard/timecard.ex (struct)
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecards.ex
β β β β β β β β β β β β β β β βββ lib/ev2/timecards/approver/approver_api.ex (compile)
β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/project_role_api.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/accounts.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/project_role.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/role_api.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/user/user.ex (struct)
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/project/project.ex (struct)
β β β β β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/approver/approver.ex (struct)
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecard/timecard.ex (struct)
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecard_setting/timecard_setting.ex (struct)
β β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils/changeset.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/production.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecard/timecard.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecard_setting/timecard_setting_constants.ex (compile)
β β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecards.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecards.ex
β β β β β β β β β β β β β β β βββ lib/ev2/timecards/department_inclusive/department_inclusive_api.ex (compile)
β β β β β β β β β β β β β β β β βββ lib/ev2/production/department/department.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/department_inclusive/department_inclusive.ex (struct)
β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils/changeset.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/department/department.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/department_inclusive/department_inclusive.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/regular_site/regular_site.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/department_inclusive/department_inclusive.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecard_setting/timecard_setting.ex
β β β β β β β β β β β β β β β βββ lib/ev2/timecards/export/export_api.ex (compile)
β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/role_api.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/user/user.ex (struct)
β β β β β β β β β β β β β β β β βββ lib/ev2/engagement/engagements.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/repo.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/export/export.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecard_setting/timecard_setting.ex
β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecards.ex
β β β β β β β β β β β β β β β β βββ lib/ev2_web/views/timecards/timecard_approval_view.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/engagement/eng_utils.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils/humanize.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils/time_utils.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/production/prod_utils.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/tc_utils.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecard/timecard.ex (struct)
β β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/timecards.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2_web.ex (compile)
β β β β β β β β β β β β β β β β β βββ lib/ev2_web/endpoint.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2_web/controllers/block_direct_heroku_access.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2_web/router.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2_web/router.ex
β β β β β β β β β β β β β β β β β βββ lib/ev2_web/views/component_view.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/lib/utils/humanize.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/production/prod_utils.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2/timecards/tc_utils.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2_web.ex (compile)
β β β β β β β β β β β β β β β β β β βββ lib/ev2_web/router.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2_web/views/error_helpers.ex (compile)
β β β β β β β β β β β β β β β β β β β βββ lib/ev2_web/gettext.ex
β β β β β β β β β β β β β β β β β β βββ lib/ev2_web/views/production/document_view.ex
β β β β β β β β β β β β β β β β β β β βββ lib/ev2/production/altered_document/altered_document.ex (struct)
β β β β β β β β β β β β β β β β β β β βββ lib/ev2/production/document/document.ex (struct)
β β β β β β β β β β β β β β β β β β β βββ lib/ev2_web.ex (compile)
β β β β β β β β β β β β β β β β β β β βββ lib/ev2_web/router.ex
β β β β β β β β β β β β β β β β β β β βββ lib/ev2_web/views/component_view.ex
β β β β β β β β β β β β β β β β β β β βββ lib/ev2_web/views/error_helpers.ex (compile)
β β β β β β β β β β β β β β β β β β β βββ lib/ev2_web/views/view_helpers.ex (compile)
β β β β β β β β β β β β β β β β β β β βββ lib/ev2/accounts/role/role_api.ex
β β β β β β β β β β β β β β β β β β β βββ lib/ev2/engagement/eng_utils.ex
β β β β β β β β β β β β β β β β β β β βββ lib/ev2/engagement/engagement/engagement.ex (struct)
β β β β β β β β β β β β β β β β β β β β βββ lib/ev2/engagement/ot_setting/ot_setting.ex
...