Skip to content

Commit

Permalink
convert to typescript
Browse files Browse the repository at this point in the history
  • Loading branch information
daimor committed Jul 15, 2018
1 parent ca53b93 commit e4d81c4
Show file tree
Hide file tree
Showing 30 changed files with 797 additions and 459 deletions.
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ root = true
[*]
charset = utf-8
indent_style = space
indent_size = 4
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
node_modules/
.idea
*.iml
.vscode/**
.vscode/**
out
8 changes: 6 additions & 2 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@
"type": "extensionHost",
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": ["--extensionDevelopmentPath=${workspaceRoot}" ]
"args": ["--extensionDevelopmentPath=${workspaceRoot}" ],
"stopOnEntry": false,
"sourceMaps": true,
"outFiles": ["${workspaceRoot}/out/**/*.js"],
"preLaunchTask": "npm"
}
]
}
}
29 changes: 0 additions & 29 deletions commands/currentdoc/cls-check-names.js

This file was deleted.

29 changes: 29 additions & 0 deletions commands/currentdoc/cls-check-names.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// is name correlate with code ?
// if ( atelier ) {
// testClass({ code: 'test.class.cls', file: 'class.cls' })
// } else {
// testClass({ code: 'test.class.cls', file: 'test.class.cls' })
//}
module.exports = ({ code, file, log = data => console.log(data) }) => {
const arr = code.split(".").filter(s => !!s); // drop empty parts

if (arr.length < 3) {
// without package
log(
`Unable to detect class.name in ${file}. Is it a valid ObjectScript class?`
);
return false;
}

// NOTE: by default, we can use package 'User'
// else if ( parts.length === 2 ){
// arr.unshift( 'User' ) //package by default
// or parse 'import' directive ;)
//}

// is codename contain filename
if (code.toLowerCase().includes(file.toLowerCase())) return true;
// else
log(`'${code}' defined in '${file}'. Rename the file or class`);
return false;
};
11 changes: 0 additions & 11 deletions commands/currentdoc/cls-regex-name.js

This file was deleted.

10 changes: 10 additions & 0 deletions commands/currentdoc/cls-regex-name.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Caché class files can be placed hierarchically (e.g. /src/Package/Class.cls),
// so we pick the class name from the class definition itself
const pattern = /Class ([^\s]+)/i; //'Class test.class'

module.exports = code => {
const arr = code.match(pattern) || []; // ['Class test.class', 'test.class']
const name = arr[1] || "",
ext = "cls";
return { name, ext }; // test.class.cls
};
74 changes: 0 additions & 74 deletions commands/currentdoc/index.js

This file was deleted.

79 changes: 79 additions & 0 deletions commands/currentdoc/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/**
* Import and compile current file.
*/
const clsRegexName = require("./cls-regex-name");
const clsCheckNames = require("./cls-check-names");
const rtnRegexName = require("./rtn-regex-name");
const rtnCheckNames = require("./rtn-check-names");

// extract and verify name of active document
// env - environment { window, languages, log }
// return { name, content, error }
const CurrentDoc = env => () => {
/*
env ={
window = {},
languages = [ 'cacheobjectscript', 'cacheobjectscriptinclude' ],
log = data => console.log( 'cos.compile:', JSON.stringify( data ) )
}
*/
const { window, languages, log } = env;
const editor = window.activeTextEditor;
if (!editor)
return {
error: "No active editor, open one at first"
};

const doc = editor.document;
if (!doc)
return {
error: "Open ObjectScript file first."
};

const fullname = doc.fileName;
if (!fullname)
return {
error: "You must save the document first"
};

if (!languages.includes(doc.languageId))
return {
error: `${fullname} has unsupported type ${doc.languageId}`
};

let file = (fullname.match(/[^\\\/]+$/) || [])[0] || ""; //only filename without folders
let code = doc.getText();
let ncode = code.replace(/\/\/[^\r\n]*\r?\n/g, ""); // normalize EOL?
let name, ext, codename; //server side name

const cdnm = ({ name, ext }) => [name, ext].join(".");

if (/\.cls$/i.test(fullname)) {
// is class?

({ name, ext } = clsRegexName(ncode));
codename = cdnm({ name, ext });
if (!clsCheckNames({ code: codename, file, log }))
return {
error: "check names"
};
} else {
// routines

({ name, ext } = rtnRegexName(ncode));
codename = cdnm({ name, ext });
if (!rtnCheckNames({ code: codename, file, log }))
return {
error: "check names"
};
}

return {
name: codename,
content: code.split(/\r?\n/g), // get code lines array
error: "",
fileName: fullname
};
};

module.exports = { CurrentDoc };
Original file line number Diff line number Diff line change
Expand Up @@ -5,38 +5,31 @@
// testClass({ codename: 'test.rtn.mac', file: 'test.rtn.mac' })
//}
module.exports = ({ code, file, log }) => {

if ( !code ){

log(

`Unable to detect routine name in source code of ${ file }.
if (!code) {
log(
`Unable to detect routine name in source code of ${file}.
Routine code example:
ROUTINE RtnName [Type=MAC]
w "routine code here"
Quit
`
)
return false

}

if ( !~code.toLowerCase().indexOf( file.toLowerCase() ) ) {
);
return false;
}

log(
`You tried to compile '${ code }' in file '${ file }'
if (!code.toLowerCase().includes(file.toLowerCase())) {
log(
`You tried to compile '${code}' in file '${file}'
Rename the file or routine to correspond to each other.
Routine code example:
Routine code example:
ROUTINE RtnName [Type=MAC]
write "routine code here"
Quit`
)
return false

}

return true
);
return false;
}

}
return true;
};
File renamed without changes.
13 changes: 0 additions & 13 deletions commands/export/doc-to-file-as-atelier.js

This file was deleted.

11 changes: 11 additions & 0 deletions commands/export/doc-to-file-as-atelier.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { sep } from "path";
//for example: 'mypkg.subpkg.myclass.cls'
// return 'mypkg/subpkg/'
module.exports = docname => {
const parts = docname.split("."); // [ 'mypkg', 'subpkg', 'myclass', 'cls' ]
const packagesEnd = parts.length - 2; // name and extension
return [
parts.slice(0, packagesEnd).join(sep), // packages to subfolders
parts.slice(packagesEnd).join(".")
].join(sep);
};
Loading

0 comments on commit e4d81c4

Please sign in to comment.