Contributing
General
Keep it simple.
Avoid external dependencies. The less dependencies the easier Lucid is interoperable between Browser, Node.js and Deno. But Deno dependencies are fine most of the time because they are mostly written in a browser compatible way.
Avoid exposing functions and arguments directly from thecardano-multiplatform-lib
ormessage-signing
library. Rather wrap them and expose types from JavaScript likestring
,number
orobject
.
Add tests to thetests
folder.
Always run and test the code with the latest Deno version. Simply dodeno upgrade
to get the latest version.
Feedback
Contributions in the form of feedback and issue is very much welcome. Might it be a suggestion, a bug report or maybe some questions that you have. It helps improving Lucid in the long run and these are probably the best kind of contributions to start with. Do not hesitate to add thumbs up đ on open issues you support to show your interest.
Style Guide
TypeScript
Use TypeScript instead of JavaScript.
Follow the default TypeScript styling conventions unless mentioned differently here.
Try to avoidany
wherever you can.Do not use the filename index.ts/index.js.
Deno does not treat âindex.jsâ or âindex.tsâ in a special way. By using these filenames, it suggests that they can be left out of the module specifier when they cannot. This is confusing.
If a directory of code needs a default entry point, use the filename mod.ts
.
The filename mod.ts
follows Rustâs convention, is shorter than index.ts
, and
doesnât come with any preconceived notions about how it might work.
Use underscores in folders and filenames.
Example: Use merkle_tree.ts
instead of merkle-tree.ts
or merkleTree.ts
.
Exported functions: max 2-3 args, put the rest into an options object.
// BAD. If the second argument was not optional, it would be OKAY to do it like this.
export function fromSeed(
address: string,
addressType?: "Base" | "Enterprise",
accountIndex?: number,
): string {}
// GOOD.
export interface SeedOptions {
addressType?: "Base" | "Enterprise";
accountIndex?: number;
}
export function fromSeed(
address: string,
options: SeedOptions = {},
): string {}
Top-level functions should not use arrow syntax.
// BAD.
export const add = (a: number, b: number): number => a + b;
// GOOD.
export function add(a: number, b: number): number {
return a + b;
}
Be explicit about types used in functions.
// BAD. Return type is only implicitly determined.
export function add(a: number, b: number) {
return a + b;
}
// GOOD.
export function add(a: number, b: number): number {
return a + b;
}
But if the return type is void
then donât explicitly mention it:
// GOOD.
export function log(str: string) {
console.log(str);
}
Structure comments properly
Single line comment:
// This is a comment.
Multiline comment:
/*
This is a comment on line 1.
This is a comment on line 2.
*/
Single line comment to describe a function/variable:
/** This functions adds two numbers together. */
export function add(a: number, b: number): number {
return a + b;
}
Multiline comment to describe a function/variable:
/**
* This functions adds two numbers together.
* This is another random comment.
*/
export function add(a: number, b: number): number {
return a + b;
}
Always end comments with a dot .
(If they are just a few words then itâs not
necessary).
Avoid JSDoc @param
. If @param
is used, it should not include the type
as
TypeScript is already strongly-typed:
/**
* Function with non-obvious param.
* @param foo Description of non-obvious parameter.
*/
Rundeno fmt
before you commit and push any code changes.
Rust
Follow Rust conventions and be consistent with existing code.