Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/robmllze/prep

This package helps you manage your project with unique source code expressions.
https://github.com/robmllze/prep

dart flutter

Last synced: 7 days ago
JSON representation

This package helps you manage your project with unique source code expressions.

Awesome Lists containing this project

README

        

# Welcome to prep

Inspired by the C preprocessor, this package helps you manage your project with unique source code expressions. It also comes with the PrepLog class that's an ideal tool for logging and debugging.

This package includes a compilable CLI application that can be used to prep source files of any programming language. See source code on GitHub: https://github.com/robmllze/prep.

The CLI works well with any Dart project **including Flutter web projects**.

## Example

## Basics

1/3 - Examine the following code (prep_example.dart):
```dart
// <##Title>
// <#Author=>
// <#Date=>
// <#Time=>

import 'package:prep/prep.dart';

const _LOG = PrepLog.file("<#f=>");

void main() {
// Process source files as per prep.yaml.
prep();
print("Follow me on Instagram " + "<#Instagram=>".prepValue);
print("This file is " + "<#f=>".prepValue);
print("This line is number " + "<#l=>".prepValue);
// Use double ## to completely replace.
print("And this line is number " + "<##l>");
print("The time now is " + "<#t>".prepValue);
// Package as per pubspec.yaml.
print("This package is " + "<#Package>".prepValue);
// Version as per pubspec.yaml.
print("The package version is " + "<#Version>".prepValue);
print("Let's print the USERNAME environment variable: " +
"<#ENV USERNAME=>".prepValue);
if (int.tryParse("42") == 42) {
// PrepLog is a great tool for debugging!
_LOG.note(
"The answer to life, the Universe and everything is...42!",
"<#l=>",
);
}
}
```

2/3 - After running the code above, it will be modified to this:
```dart
// PREP EXAMPLE
// <#Author = Robert Mollentze>
// <#Date = 8/26/2021>
// <#Time = 23:15>

import 'package:prep/prep.dart';

const _LOG = PrepLog.file("<#f=prep_example.dart>");

void main() {
// Process source files as per prep.yaml.
prep();
print("Follow me on Instagram " + "<#Instagram = @robmllze>".prepValue);
print("This file is " + "<#f=prep_example.dart>".prepValue);
print("This line is number " + "<#l=15>".prepValue);
// Use double ## to completely replace.
print("And this line is number " + "17");
print("The time now is " + "<#t=23:15>".prepValue);
// Package as per pubspec.yaml.
print("This package is " + "<#Package = prep>".prepValue);
// Version as per pubspec.yaml.
print("The package version is " + "<#Version = 0.3.5>".prepValue);
print("Let's print the USERNAME environment variable: " +
"<#ENV USERNAME = guest>".prepValue);
if (int.tryParse("42") == 42) {
// PrepLog is a great tool for debugging!
_LOG.note(
"The answer to life, the Universe and everything is...42!",
"<#l=29>",
);
}
}
```

3/3 - Finally, this will be the output:
```text
Follow me on Instagram @robmllze
This file is prep_example.dart
This line is number 13
And this line is number 15
The time now is 23:15
This package is prep
The package version is 0.3.5
Let's print the USERNAME environment variable: guest
[0] 🟢 In FILE prep_example.dart and LINE 27 ⏳ 0.003s
"The answer to life, the Universe and everything is...42!"
```

## Expressions

### **Current Time:**
Update: `<#Time= >` or `<#t= >`

Replace: `<##Time>` or `<##t>`

### **Relative Path of Current File:**
Update: `<#Path= >` or `<#p= >`

Replace: `<##Path>` or `<##p>`

### **Short File Name of Current File:**
Update: `<#File= >` or `<#f= >`

Replace: `<##File>` or `<##f>`

### **Current Line:**
Update: `<#Line= >` or `<#l= >`

Replace: `<##Line>` or `<##l>`

### **Operating System:**
Update: `<#OS= >`

Replace: `<##OS>`

### **File Title:**
Update: `<#Title= >`

Replace: `<##Title>`

### **Environment Variables:**

Update: `<#ENV PATH= >` or `<#ENV COMPUTERNAME= >` or `<#ENV USERNAME= >` etc.

Replace: `<##ENV PATH>` or `<##ENV COMPUTERNAME>` or `<#ENV USERNAME>` etc.

### **Comment Breaks:**

`// <##br-heavy>`

`// <##br-medium>`

`// <##br-light>`

`// <##br-dash>`

`// <##br-line>`

### **Intro:**

`// <##intro>`

## Installing
```yaml
dev_dependencies:
prep: ^0.3.5 # https://pub.dev/packages/prep
```

## Configuring

Add the following to **prep.yaml** in your project's root directory:
```yaml
# This file was auto-generated by prep().
# Rename it to "prep.yaml" to use it.
# If you like this package, please follow me on Instagram @robmllze.
# Feel free to DM me about bugs or questions.

# Files in this directory and all its subdirectories will be parsable.
path: "."

# If you need to tweak the syntax, do it here.
# Note: This is experimental!
syntax_beg: "<" # This also works well: "`"
syntax_end: ">" # This also works well: "`"
syntax_sep: "=" # This also works well: ":"

# Set to true to include your environment variables.
# Note: This significantly slows down the prep function but it does
# not matter if you use it asynchronously.
include_env: true

# Specify which custom fields to update.
update_these_fields: {
"Author": "Robert Mollentze",
"GitHub": "@robmllze",
"Instagram": "@robmllze",
"Email": "[email protected]",
}

# Specify which file types to parse.
parse_these_file_types: [
"dart",
"md",
"yaml",
]

# Specify which files not to parse.
dont_parse_these_files: [
"prep.yaml",
"README.md",
]
```

Alternatively, you can specify configurations in the prep function. This will override whatever's in prep.yaml.

```dart
void main() {
// ...
prep(
path: ".",
parseTheseFileTypes: [
"dart",
"yaml",
],
dontParseTheseFiles: [
"prep.yaml",
],
updateTheseFields: {
"Author": "Robert Mollentze",
"GitHub": "@robmllze",
"Instagram": "@robmllze",
"Email": "[email protected]",
},
includeEnv: true,
);
// ...
}
```

## Finally

Have a peak at my other package, *elliptic_text*, available at https://pub.dev/packages/elliptic_text/.

Please let me know if you find any bugs or if you have suggestions.

Thanks,

Robert Mollentze

**GitHub**: https://github.com/robmllze/

**Medium**: https://robmllze.medium.com/

**Email**: [email protected]