Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Ensure generated docs dir has same structure as src dir
Browse files Browse the repository at this point in the history
Akirathan committed Jan 29, 2025
1 parent 51becef commit 30904f6
Showing 2 changed files with 69 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -33,9 +33,8 @@ public static <File> File write(
DocsVisit visitor, org.enso.pkg.Package<File> pkg, Iterable<CompilerContext.Module> modules)
throws IOException {
var fs = pkg.fileSystem();
var docs = fs.getChild(pkg.root(), "docs");
var api = fs.getChild(docs, "api");
fs.createDirectories(api);
var apiDir = defaultOutputDir(pkg);
fs.createDirectories(apiDir);

for (var module : modules) {
if (module.isSynthetic()) {
@@ -47,17 +46,40 @@ public static <File> File write(
continue;
}
var moduleName = module.getName();
var dir = createPkg(fs, api, moduleName);
var dir = createDirs(fs, apiDir, stripNamespace(moduleName));
var md = fs.getChild(dir, moduleName.item() + ".md");
try (var mdWriter = fs.newBufferedWriter(md);
var pw = new PrintWriter(mdWriter)) {
visitModule(visitor, moduleName, ir, pw);
}
}
return apiDir;
}

public static <File> File defaultOutputDir(org.enso.pkg.Package<File> pkg) {
var fs = pkg.fileSystem();
var docs = fs.getChild(pkg.root(), "docs");
var api = fs.getChild(docs, "api");
return api;
}

private static <File> File createPkg(FileSystem<File> fs, File root, QualifiedName pkg)
/**
* Strips namespace part from the given qualified {@code name}.
*
* @param name
*/
private static QualifiedName stripNamespace(QualifiedName name) {
if (!name.isSimple()) {
var path = name.pathAsJava();
assert path.size() >= 2;
var dropped = path.subList(2, path.size());
return new QualifiedName(asScala(dropped), name.item());
} else {
return name;
}
}

private static <File> File createDirs(FileSystem<File> fs, File root, QualifiedName pkg)
throws IOException {
var dir = root;
for (var item : pkg.pathAsJava()) {
@@ -119,4 +141,8 @@ public static void visitModule(
private static <T> List<T> asJava(Seq<T> seq) {
return CollectionConverters.asJava(seq);
}

private static <T> scala.collection.immutable.List<T> asScala(List<T> list) {
return CollectionConverters.asScala(list).toList();
}
}
Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.anyOf;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.startsWith;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
@@ -11,15 +12,20 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.enso.compiler.Compiler;
import org.enso.compiler.core.IR;
import org.enso.compiler.core.ir.Module;
import org.enso.compiler.core.ir.module.scope.Definition;
import org.enso.compiler.core.ir.module.scope.definition.Method;
import org.enso.compiler.docs.DocsGenerate;
import org.enso.compiler.docs.DocsVisit;
import org.enso.editions.LibraryName;
import org.enso.interpreter.runtime.EnsoContext;
import org.enso.pkg.QualifiedName;
import org.enso.test.utils.ContextUtils;
import org.enso.test.utils.ProjectUtils;
import org.enso.test.utils.SourceModule;
import org.graalvm.polyglot.Context;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -273,6 +279,38 @@ public void generatedSignature_HasCorrectMarkdownFormat() throws IOException {
});
}

@Test
public void generatedSignaturesForProject_HasSameDirectoryHierarchyAsSources()
throws IOException {
var projName = "Proj";
var modules =
Set.of(
new SourceModule(QualifiedName.fromString("Main"), "main = 42"),
new SourceModule(QualifiedName.fromString("Subdir.Submodule"), "submodule = 42"));
var projDir = TEMP.newFolder(projName);
ProjectUtils.createProject(projName, modules, projDir.toPath());
ProjectUtils.generateProjectDocs(
"api",
ContextUtils.defaultContextBuilder(),
projDir.toPath(),
ctx -> {
var ensoCtx = ContextUtils.leakContext(ctx);
var pkg =
ensoCtx
.getPackageRepository()
.getPackageForLibrary(LibraryName.apply("local", projName));
assertThat(pkg.isDefined(), is(true));
var signatureOutDir = DocsGenerate.defaultOutputDir(pkg.get());
assertThat(
"Default output dir for signatures was created", signatureOutDir.exists(), is(true));
var srcDir = pkg.get().sourceDir();
assertThat(srcDir.resolve("Main.enso").exists(), is(true));
assertThat(signatureOutDir.resolve("Main.md").exists(), is(true));
assertThat(srcDir.resolve("Subdir").resolve("Submodule.enso").exists(), is(true));
assertThat(signatureOutDir.resolve("Subdir").resolve("Submodule.md").exists(), is(true));
});
}

@Test
public void vectorWithElements() throws Exception {
var code =

0 comments on commit 30904f6

Please sign in to comment.