DEV Community

suin
suin

Posted on

How Moonrepo Recognizes Project Languages

In this article, we will explain how the monorepo management tool Moon recognizes the languages of projects.

What is Moon?

Moon is a monorepo management tool. A monorepo is a method of managing multiple projects or packages within a single repository. Moon helps manage these projects efficiently and integrates tasks such as building, testing, and deploying. It manages dependencies between projects and improves development efficiency while maintaining consistency across the repository.

For more details: Moon Official Site

Managing Language Information

Moon maintains language information for each project and selects tasks to execute based on the language. The language information of a project can be set by describing it in the language field of the moon.yml file.

Example for a TypeScript project:

language: typescript
Enter fullscreen mode Exit fullscreen mode

With this setting, tasks defined in the .moon/tasks/typescript.yml file will be executed for that project. This feature is known as task inheritance. For more details, see here.

When No Language is Specified

If no language is specified in moon.yml, Moon will analyze the project's files and automatically identify the language. Thanks to Moon's intelligent design, it determines the programming language based on specific files.

How Language Detection Works

Moon determines the project's programming language based on specific files found in the project's root directory. The following is how Moon detects each language.

1. Checking for Go Files

If any of the following files are found, the project's language is determined to be Go:

  • go.mod
  • go.sum
  • g.lock
  • .gvmrc
  • .go-version

2. Checking for PHP Files

If any of the following files are found, the project's language is determined to be PHP:

  • composer.json
  • composer.lock
  • .phpenv-version
  • .phpbrewrc

3. Checking for Python Files

If any of the following files are found, the project's language is determined to be Python:

  • requirements.txt
  • constraints.txt
  • pyproject.toml
  • .pylock.toml
  • .python-version
  • Pipfile
  • Pipfile.lock
  • poetry.toml
  • poetry.lock

4. Checking for Ruby Files

If any of the following files are found, the project's language is determined to be Ruby:

  • Gemfile
  • Gemfile.lock
  • .bundle
  • .ruby-version

5. Checking for Rust Files

If any of the following files are found, the project's language is determined to be Rust:

  • Cargo.toml
  • Cargo.lock
  • .cargo
  • rust-toolchain.toml
  • rust-toolchain

6. Checking for TypeScript Files

If any of the following files are found, the project's language is determined to be TypeScript:

  • tsconfig.json
  • tsconfig.tsbuildinfo

Additionally, Deno files are also checked:

  • deno.json
  • deno.jsonc
  • deno.lock
  • .dvmrc

7. Checking for JavaScript Files

If any of the following files are found, the project's language is determined to be JavaScript:

  • package.json
  • .nvmrc
  • .node-version
  • package-lock.json
  • .npmrc
  • .pnpmfile.cjs
  • pnpm-lock.yaml
  • pnpm-workspace.yaml
  • yarn.lock
  • .yarn
  • .yarnrc
  • .yarnrc.yml

Additionally, Bun files are also checked:

  • bunfig.toml
  • bun.lockb
  • .bunrc

8. If No Files Are Found

If none of the specific files are found, the project's language is determined to be unknown.

This specification allows Moon to determine the programming language based on the file structure within the project. For more details, see here.

Explicitly Specifying the Language

If you do not want Moon to estimate the project's language, it is recommended to explicitly specify the language field in the moon.yml file. However, be sure to specify a value other than unknown because specifying unknown will trigger the detection feature described above.

I hope this article helps deepen your understanding of how Moon recognizes project languages.

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay