Skip to content

Repository files navigation

Active Documentation

This app is written in "React" framework.

  • It communicates with the IDE Connector using "Web-Socket".
  • It is based on srcML library, which should be installed as instructed here.

spmf.jar

This file is required for FP_MAX selectedAlgorithm (for mining design rules) to execute. It can be downloaded from this repository or here. The file should be copied/moved to the root directory of the project.

ruleTable.json

There must be a file name ruleTable.json in the project folder in which all rules are stored. grammar field is recently added for each rule. It is mandatory but is generated for newly added rules. Here is an example for this file:

[{"index": "1","title": "All Buttons must have a title","description": "IF a JButton is created\nTHEN it should be initialized and have a title upon creating.","tags": ["Labeling"],"checkForFilesFolders": ["src"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "WITHIN",// JButtons"quantifierXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\"]"],// JButtons with labels in constructor"constraintXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\" and count(src:init/src:expr/src:call/src:argument_list/src:argument)>0]"]},{"index": "6","title": "Communication between artifacts should be indirected through a Command","description": "IF an Artifact needs to communicate with another artifact\nTHEN it should create a Command describing the desired action to be performed.\nEach Artifact exists in a separate shard, which may execute in parallel on a separate server. An artifact may communicate with another artifact by creating a Command which describes the action that it wishes the receiving Artifact to perform.","tags": ["Sharding","Command","Entity","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/commands","src/com/crowdcoding/entities"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED","quantifierQueryType": "FIND_FROM_TEXT",// Calling constructors of all entity objects"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"],"constraintQueryType": "RETURN_TO_BASE",// Calling constructors of allowed entity objects","constraintXPathQuery": ["//src:unit/src:class/src:block/src:function_decl[src:name/text()=\"execute\"]/src:parameter_list/src:parameter/src:decl/src:type/src:name[not(text()=\"String\")]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\" or (src:super/src:extends/src:name/text()=\"<TEMP>\")]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"]},{"index": "11","title": "@Entity classes must be registered in the CrowdServlet class","description": "IF a class is an Entity class or subclass \nTHEN it must be registered in 'CrowdServlet' class by ObjectifyService.\nAll entities needs to be registered with Objectify, so that Objectify knows to persist them. The registration must be done in 'CrowdServlet.java'","tags": ["Entity","Objectify","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/entities","src/com/crowdcoding/servlets"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED",// Entity classes"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]"],"constraintQueryType": "FIND_FROM_TEXT",// Registered classes"constraintXPathQuery": ["//src:unit/src:class[src:name/text()=\"CrowdServlet\"]//src:expr_stmt/src:expr/src:call[src:name/src:name/text()=\"ObjectifyService\" and src:name/src:name/text()=\"register\"]/src:argument_list/src:argument/src:expr/src:name/src:name[1]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\"]"]}]

tagTable.json

There is also another json file named tagTable.json. In this file we store information about tags. Here is an example for this file:

[{"ID": "0","tagName": "Labeling","detail": "Rules about labeling the items used in the application. The labeling must follows special policies."},{"ID": "1","tagName": "Objects","detail": "Rules about object created in the application. For each object there might be some constraints and considerations."}]

RulePad Grammar

This system is using ANTLR4.

  • The grammar is stored in rulePadGrammar.g4
  • The generated code with ANTLR is created through gradle script.
  • The gradle.build file is located in the root directory of the project.
  • Run gradle generateParser

Clearing Search history in IntelliJ (for Learning Design Rules)

Edit the related workspace xml file in this directory (in MacOS): ~/Library/Application Support/JetBrains/IntelliJIdea2020.1/workspace

Used Ports

Three ports are used for this application:

  • 8887 for websocket
  • 3000 for application server (Changing Frequently, check package.json for the active port)

Dev Reports

Currently, there are issues in upgrading the dependencies. If devDependencies are updated, then antlr-4 become incompatible unless a configuration of Webpack is changed. If only "react-scripts" is updated to "^4.0.3", then there would be warning about eslint that can be removed by adding SKIP_PREFLIGHT_CHECK=true to the .env file. To install, npm install --legacy-peer-deps should be used.

About

React, React-Bootstrap

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - devuxd/active-doc-client: React, React-Bootstrap · GitHub
Skip to content

Repository files navigation

Active Documentation

This app is written in "React" framework.

  • It communicates with the IDE Connector using "Web-Socket".
  • It is based on srcML library, which should be installed as instructed here.

spmf.jar

This file is required for FP_MAX selectedAlgorithm (for mining design rules) to execute. It can be downloaded from this repository or here. The file should be copied/moved to the root directory of the project.

ruleTable.json

There must be a file name ruleTable.json in the project folder in which all rules are stored. grammar field is recently added for each rule. It is mandatory but is generated for newly added rules. Here is an example for this file:

[{"index": "1","title": "All Buttons must have a title","description": "IF a JButton is created\nTHEN it should be initialized and have a title upon creating.","tags": ["Labeling"],"checkForFilesFolders": ["src"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "WITHIN",// JButtons"quantifierXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\"]"],// JButtons with labels in constructor"constraintXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\" and count(src:init/src:expr/src:call/src:argument_list/src:argument)>0]"]},{"index": "6","title": "Communication between artifacts should be indirected through a Command","description": "IF an Artifact needs to communicate with another artifact\nTHEN it should create a Command describing the desired action to be performed.\nEach Artifact exists in a separate shard, which may execute in parallel on a separate server. An artifact may communicate with another artifact by creating a Command which describes the action that it wishes the receiving Artifact to perform.","tags": ["Sharding","Command","Entity","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/commands","src/com/crowdcoding/entities"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED","quantifierQueryType": "FIND_FROM_TEXT",// Calling constructors of all entity objects"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"],"constraintQueryType": "RETURN_TO_BASE",// Calling constructors of allowed entity objects","constraintXPathQuery": ["//src:unit/src:class/src:block/src:function_decl[src:name/text()=\"execute\"]/src:parameter_list/src:parameter/src:decl/src:type/src:name[not(text()=\"String\")]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\" or (src:super/src:extends/src:name/text()=\"<TEMP>\")]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"]},{"index": "11","title": "@Entity classes must be registered in the CrowdServlet class","description": "IF a class is an Entity class or subclass \nTHEN it must be registered in 'CrowdServlet' class by ObjectifyService.\nAll entities needs to be registered with Objectify, so that Objectify knows to persist them. The registration must be done in 'CrowdServlet.java'","tags": ["Entity","Objectify","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/entities","src/com/crowdcoding/servlets"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED",// Entity classes"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]"],"constraintQueryType": "FIND_FROM_TEXT",// Registered classes"constraintXPathQuery": ["//src:unit/src:class[src:name/text()=\"CrowdServlet\"]//src:expr_stmt/src:expr/src:call[src:name/src:name/text()=\"ObjectifyService\" and src:name/src:name/text()=\"register\"]/src:argument_list/src:argument/src:expr/src:name/src:name[1]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\"]"]}]

tagTable.json

There is also another json file named tagTable.json. In this file we store information about tags. Here is an example for this file:

[{"ID": "0","tagName": "Labeling","detail": "Rules about labeling the items used in the application. The labeling must follows special policies."},{"ID": "1","tagName": "Objects","detail": "Rules about object created in the application. For each object there might be some constraints and considerations."}]

RulePad Grammar

This system is using ANTLR4.

  • The grammar is stored in rulePadGrammar.g4
  • The generated code with ANTLR is created through gradle script.
  • The gradle.build file is located in the root directory of the project.
  • Run gradle generateParser

Clearing Search history in IntelliJ (for Learning Design Rules)

Edit the related workspace xml file in this directory (in MacOS): ~/Library/Application Support/JetBrains/IntelliJIdea2020.1/workspace

Used Ports

Three ports are used for this application:

  • 8887 for websocket
  • 3000 for application server (Changing Frequently, check package.json for the active port)

Dev Reports

Currently, there are issues in upgrading the dependencies. If devDependencies are updated, then antlr-4 become incompatible unless a configuration of Webpack is changed. If only "react-scripts" is updated to "^4.0.3", then there would be warning about eslint that can be removed by adding SKIP_PREFLIGHT_CHECK=true to the .env file. To install, npm install --legacy-peer-deps should be used.

About

React, React-Bootstrap

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - devuxd/active-doc-client: React, React-Bootstrap · GitHub
Skip to content

Repository files navigation

Active Documentation

This app is written in "React" framework.

  • It communicates with the IDE Connector using "Web-Socket".
  • It is based on srcML library, which should be installed as instructed here.

spmf.jar

This file is required for FP_MAX selectedAlgorithm (for mining design rules) to execute. It can be downloaded from this repository or here. The file should be copied/moved to the root directory of the project.

ruleTable.json

There must be a file name ruleTable.json in the project folder in which all rules are stored. grammar field is recently added for each rule. It is mandatory but is generated for newly added rules. Here is an example for this file:

[{"index": "1","title": "All Buttons must have a title","description": "IF a JButton is created\nTHEN it should be initialized and have a title upon creating.","tags": ["Labeling"],"checkForFilesFolders": ["src"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "WITHIN",// JButtons"quantifierXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\"]"],// JButtons with labels in constructor"constraintXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\" and count(src:init/src:expr/src:call/src:argument_list/src:argument)>0]"]},{"index": "6","title": "Communication between artifacts should be indirected through a Command","description": "IF an Artifact needs to communicate with another artifact\nTHEN it should create a Command describing the desired action to be performed.\nEach Artifact exists in a separate shard, which may execute in parallel on a separate server. An artifact may communicate with another artifact by creating a Command which describes the action that it wishes the receiving Artifact to perform.","tags": ["Sharding","Command","Entity","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/commands","src/com/crowdcoding/entities"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED","quantifierQueryType": "FIND_FROM_TEXT",// Calling constructors of all entity objects"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"],"constraintQueryType": "RETURN_TO_BASE",// Calling constructors of allowed entity objects","constraintXPathQuery": ["//src:unit/src:class/src:block/src:function_decl[src:name/text()=\"execute\"]/src:parameter_list/src:parameter/src:decl/src:type/src:name[not(text()=\"String\")]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\" or (src:super/src:extends/src:name/text()=\"<TEMP>\")]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"]},{"index": "11","title": "@Entity classes must be registered in the CrowdServlet class","description": "IF a class is an Entity class or subclass \nTHEN it must be registered in 'CrowdServlet' class by ObjectifyService.\nAll entities needs to be registered with Objectify, so that Objectify knows to persist them. The registration must be done in 'CrowdServlet.java'","tags": ["Entity","Objectify","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/entities","src/com/crowdcoding/servlets"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED",// Entity classes"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]"],"constraintQueryType": "FIND_FROM_TEXT",// Registered classes"constraintXPathQuery": ["//src:unit/src:class[src:name/text()=\"CrowdServlet\"]//src:expr_stmt/src:expr/src:call[src:name/src:name/text()=\"ObjectifyService\" and src:name/src:name/text()=\"register\"]/src:argument_list/src:argument/src:expr/src:name/src:name[1]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\"]"]}]

tagTable.json

There is also another json file named tagTable.json. In this file we store information about tags. Here is an example for this file:

[{"ID": "0","tagName": "Labeling","detail": "Rules about labeling the items used in the application. The labeling must follows special policies."},{"ID": "1","tagName": "Objects","detail": "Rules about object created in the application. For each object there might be some constraints and considerations."}]

RulePad Grammar

This system is using ANTLR4.

  • The grammar is stored in rulePadGrammar.g4
  • The generated code with ANTLR is created through gradle script.
  • The gradle.build file is located in the root directory of the project.
  • Run gradle generateParser

Clearing Search history in IntelliJ (for Learning Design Rules)

Edit the related workspace xml file in this directory (in MacOS): ~/Library/Application Support/JetBrains/IntelliJIdea2020.1/workspace

Used Ports

Three ports are used for this application:

  • 8887 for websocket
  • 3000 for application server (Changing Frequently, check package.json for the active port)

Dev Reports

Currently, there are issues in upgrading the dependencies. If devDependencies are updated, then antlr-4 become incompatible unless a configuration of Webpack is changed. If only "react-scripts" is updated to "^4.0.3", then there would be warning about eslint that can be removed by adding SKIP_PREFLIGHT_CHECK=true to the .env file. To install, npm install --legacy-peer-deps should be used.

About

React, React-Bootstrap

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - devuxd/active-doc-client: React, React-Bootstrap · GitHub
Skip to content

Repository files navigation

Active Documentation

This app is written in "React" framework.

  • It communicates with the IDE Connector using "Web-Socket".
  • It is based on srcML library, which should be installed as instructed here.

spmf.jar

This file is required for FP_MAX selectedAlgorithm (for mining design rules) to execute. It can be downloaded from this repository or here. The file should be copied/moved to the root directory of the project.

ruleTable.json

There must be a file name ruleTable.json in the project folder in which all rules are stored. grammar field is recently added for each rule. It is mandatory but is generated for newly added rules. Here is an example for this file:

[{"index": "1","title": "All Buttons must have a title","description": "IF a JButton is created\nTHEN it should be initialized and have a title upon creating.","tags": ["Labeling"],"checkForFilesFolders": ["src"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "WITHIN",// JButtons"quantifierXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\"]"],// JButtons with labels in constructor"constraintXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\" and count(src:init/src:expr/src:call/src:argument_list/src:argument)>0]"]},{"index": "6","title": "Communication between artifacts should be indirected through a Command","description": "IF an Artifact needs to communicate with another artifact\nTHEN it should create a Command describing the desired action to be performed.\nEach Artifact exists in a separate shard, which may execute in parallel on a separate server. An artifact may communicate with another artifact by creating a Command which describes the action that it wishes the receiving Artifact to perform.","tags": ["Sharding","Command","Entity","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/commands","src/com/crowdcoding/entities"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED","quantifierQueryType": "FIND_FROM_TEXT",// Calling constructors of all entity objects"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"],"constraintQueryType": "RETURN_TO_BASE",// Calling constructors of allowed entity objects","constraintXPathQuery": ["//src:unit/src:class/src:block/src:function_decl[src:name/text()=\"execute\"]/src:parameter_list/src:parameter/src:decl/src:type/src:name[not(text()=\"String\")]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\" or (src:super/src:extends/src:name/text()=\"<TEMP>\")]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"]},{"index": "11","title": "@Entity classes must be registered in the CrowdServlet class","description": "IF a class is an Entity class or subclass \nTHEN it must be registered in 'CrowdServlet' class by ObjectifyService.\nAll entities needs to be registered with Objectify, so that Objectify knows to persist them. The registration must be done in 'CrowdServlet.java'","tags": ["Entity","Objectify","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/entities","src/com/crowdcoding/servlets"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED",// Entity classes"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]"],"constraintQueryType": "FIND_FROM_TEXT",// Registered classes"constraintXPathQuery": ["//src:unit/src:class[src:name/text()=\"CrowdServlet\"]//src:expr_stmt/src:expr/src:call[src:name/src:name/text()=\"ObjectifyService\" and src:name/src:name/text()=\"register\"]/src:argument_list/src:argument/src:expr/src:name/src:name[1]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\"]"]}]

tagTable.json

There is also another json file named tagTable.json. In this file we store information about tags. Here is an example for this file:

[{"ID": "0","tagName": "Labeling","detail": "Rules about labeling the items used in the application. The labeling must follows special policies."},{"ID": "1","tagName": "Objects","detail": "Rules about object created in the application. For each object there might be some constraints and considerations."}]

RulePad Grammar

This system is using ANTLR4.

  • The grammar is stored in rulePadGrammar.g4
  • The generated code with ANTLR is created through gradle script.
  • The gradle.build file is located in the root directory of the project.
  • Run gradle generateParser

Clearing Search history in IntelliJ (for Learning Design Rules)

Edit the related workspace xml file in this directory (in MacOS): ~/Library/Application Support/JetBrains/IntelliJIdea2020.1/workspace

Used Ports

Three ports are used for this application:

  • 8887 for websocket
  • 3000 for application server (Changing Frequently, check package.json for the active port)

Dev Reports

Currently, there are issues in upgrading the dependencies. If devDependencies are updated, then antlr-4 become incompatible unless a configuration of Webpack is changed. If only "react-scripts" is updated to "^4.0.3", then there would be warning about eslint that can be removed by adding SKIP_PREFLIGHT_CHECK=true to the .env file. To install, npm install --legacy-peer-deps should be used.

About

React, React-Bootstrap

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - devuxd/active-doc-client: React, React-Bootstrap · GitHub
Skip to content

Repository files navigation

Active Documentation

This app is written in "React" framework.

  • It communicates with the IDE Connector using "Web-Socket".
  • It is based on srcML library, which should be installed as instructed here.

spmf.jar

This file is required for FP_MAX selectedAlgorithm (for mining design rules) to execute. It can be downloaded from this repository or here. The file should be copied/moved to the root directory of the project.

ruleTable.json

There must be a file name ruleTable.json in the project folder in which all rules are stored. grammar field is recently added for each rule. It is mandatory but is generated for newly added rules. Here is an example for this file:

[{"index": "1","title": "All Buttons must have a title","description": "IF a JButton is created\nTHEN it should be initialized and have a title upon creating.","tags": ["Labeling"],"checkForFilesFolders": ["src"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "WITHIN",// JButtons"quantifierXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\"]"],// JButtons with labels in constructor"constraintXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\" and count(src:init/src:expr/src:call/src:argument_list/src:argument)>0]"]},{"index": "6","title": "Communication between artifacts should be indirected through a Command","description": "IF an Artifact needs to communicate with another artifact\nTHEN it should create a Command describing the desired action to be performed.\nEach Artifact exists in a separate shard, which may execute in parallel on a separate server. An artifact may communicate with another artifact by creating a Command which describes the action that it wishes the receiving Artifact to perform.","tags": ["Sharding","Command","Entity","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/commands","src/com/crowdcoding/entities"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED","quantifierQueryType": "FIND_FROM_TEXT",// Calling constructors of all entity objects"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"],"constraintQueryType": "RETURN_TO_BASE",// Calling constructors of allowed entity objects","constraintXPathQuery": ["//src:unit/src:class/src:block/src:function_decl[src:name/text()=\"execute\"]/src:parameter_list/src:parameter/src:decl/src:type/src:name[not(text()=\"String\")]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\" or (src:super/src:extends/src:name/text()=\"<TEMP>\")]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"]},{"index": "11","title": "@Entity classes must be registered in the CrowdServlet class","description": "IF a class is an Entity class or subclass \nTHEN it must be registered in 'CrowdServlet' class by ObjectifyService.\nAll entities needs to be registered with Objectify, so that Objectify knows to persist them. The registration must be done in 'CrowdServlet.java'","tags": ["Entity","Objectify","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/entities","src/com/crowdcoding/servlets"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED",// Entity classes"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]"],"constraintQueryType": "FIND_FROM_TEXT",// Registered classes"constraintXPathQuery": ["//src:unit/src:class[src:name/text()=\"CrowdServlet\"]//src:expr_stmt/src:expr/src:call[src:name/src:name/text()=\"ObjectifyService\" and src:name/src:name/text()=\"register\"]/src:argument_list/src:argument/src:expr/src:name/src:name[1]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\"]"]}]

tagTable.json

There is also another json file named tagTable.json. In this file we store information about tags. Here is an example for this file:

[{"ID": "0","tagName": "Labeling","detail": "Rules about labeling the items used in the application. The labeling must follows special policies."},{"ID": "1","tagName": "Objects","detail": "Rules about object created in the application. For each object there might be some constraints and considerations."}]

RulePad Grammar

This system is using ANTLR4.

  • The grammar is stored in rulePadGrammar.g4
  • The generated code with ANTLR is created through gradle script.
  • The gradle.build file is located in the root directory of the project.
  • Run gradle generateParser

Clearing Search history in IntelliJ (for Learning Design Rules)

Edit the related workspace xml file in this directory (in MacOS): ~/Library/Application Support/JetBrains/IntelliJIdea2020.1/workspace

Used Ports

Three ports are used for this application:

  • 8887 for websocket
  • 3000 for application server (Changing Frequently, check package.json for the active port)

Dev Reports

Currently, there are issues in upgrading the dependencies. If devDependencies are updated, then antlr-4 become incompatible unless a configuration of Webpack is changed. If only "react-scripts" is updated to "^4.0.3", then there would be warning about eslint that can be removed by adding SKIP_PREFLIGHT_CHECK=true to the .env file. To install, npm install --legacy-peer-deps should be used.

About

React, React-Bootstrap

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - devuxd/active-doc-client: React, React-Bootstrap · GitHub
Skip to content

Repository files navigation

Active Documentation

This app is written in "React" framework.

  • It communicates with the IDE Connector using "Web-Socket".
  • It is based on srcML library, which should be installed as instructed here.

spmf.jar

This file is required for FP_MAX selectedAlgorithm (for mining design rules) to execute. It can be downloaded from this repository or here. The file should be copied/moved to the root directory of the project.

ruleTable.json

There must be a file name ruleTable.json in the project folder in which all rules are stored. grammar field is recently added for each rule. It is mandatory but is generated for newly added rules. Here is an example for this file:

[{"index": "1","title": "All Buttons must have a title","description": "IF a JButton is created\nTHEN it should be initialized and have a title upon creating.","tags": ["Labeling"],"checkForFilesFolders": ["src"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "WITHIN",// JButtons"quantifierXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\"]"],// JButtons with labels in constructor"constraintXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\" and count(src:init/src:expr/src:call/src:argument_list/src:argument)>0]"]},{"index": "6","title": "Communication between artifacts should be indirected through a Command","description": "IF an Artifact needs to communicate with another artifact\nTHEN it should create a Command describing the desired action to be performed.\nEach Artifact exists in a separate shard, which may execute in parallel on a separate server. An artifact may communicate with another artifact by creating a Command which describes the action that it wishes the receiving Artifact to perform.","tags": ["Sharding","Command","Entity","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/commands","src/com/crowdcoding/entities"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED","quantifierQueryType": "FIND_FROM_TEXT",// Calling constructors of all entity objects"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"],"constraintQueryType": "RETURN_TO_BASE",// Calling constructors of allowed entity objects","constraintXPathQuery": ["//src:unit/src:class/src:block/src:function_decl[src:name/text()=\"execute\"]/src:parameter_list/src:parameter/src:decl/src:type/src:name[not(text()=\"String\")]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\" or (src:super/src:extends/src:name/text()=\"<TEMP>\")]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"]},{"index": "11","title": "@Entity classes must be registered in the CrowdServlet class","description": "IF a class is an Entity class or subclass \nTHEN it must be registered in 'CrowdServlet' class by ObjectifyService.\nAll entities needs to be registered with Objectify, so that Objectify knows to persist them. The registration must be done in 'CrowdServlet.java'","tags": ["Entity","Objectify","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/entities","src/com/crowdcoding/servlets"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED",// Entity classes"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]"],"constraintQueryType": "FIND_FROM_TEXT",// Registered classes"constraintXPathQuery": ["//src:unit/src:class[src:name/text()=\"CrowdServlet\"]//src:expr_stmt/src:expr/src:call[src:name/src:name/text()=\"ObjectifyService\" and src:name/src:name/text()=\"register\"]/src:argument_list/src:argument/src:expr/src:name/src:name[1]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\"]"]}]

tagTable.json

There is also another json file named tagTable.json. In this file we store information about tags. Here is an example for this file:

[{"ID": "0","tagName": "Labeling","detail": "Rules about labeling the items used in the application. The labeling must follows special policies."},{"ID": "1","tagName": "Objects","detail": "Rules about object created in the application. For each object there might be some constraints and considerations."}]

RulePad Grammar

This system is using ANTLR4.

  • The grammar is stored in rulePadGrammar.g4
  • The generated code with ANTLR is created through gradle script.
  • The gradle.build file is located in the root directory of the project.
  • Run gradle generateParser

Clearing Search history in IntelliJ (for Learning Design Rules)

Edit the related workspace xml file in this directory (in MacOS): ~/Library/Application Support/JetBrains/IntelliJIdea2020.1/workspace

Used Ports

Three ports are used for this application:

  • 8887 for websocket
  • 3000 for application server (Changing Frequently, check package.json for the active port)

Dev Reports

Currently, there are issues in upgrading the dependencies. If devDependencies are updated, then antlr-4 become incompatible unless a configuration of Webpack is changed. If only "react-scripts" is updated to "^4.0.3", then there would be warning about eslint that can be removed by adding SKIP_PREFLIGHT_CHECK=true to the .env file. To install, npm install --legacy-peer-deps should be used.

About

React, React-Bootstrap

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - devuxd/active-doc-client: React, React-Bootstrap · GitHub
Skip to content

Repository files navigation

Active Documentation

This app is written in "React" framework.

  • It communicates with the IDE Connector using "Web-Socket".
  • It is based on srcML library, which should be installed as instructed here.

spmf.jar

This file is required for FP_MAX selectedAlgorithm (for mining design rules) to execute. It can be downloaded from this repository or here. The file should be copied/moved to the root directory of the project.

ruleTable.json

There must be a file name ruleTable.json in the project folder in which all rules are stored. grammar field is recently added for each rule. It is mandatory but is generated for newly added rules. Here is an example for this file:

[{"index": "1","title": "All Buttons must have a title","description": "IF a JButton is created\nTHEN it should be initialized and have a title upon creating.","tags": ["Labeling"],"checkForFilesFolders": ["src"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "WITHIN",// JButtons"quantifierXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\"]"],// JButtons with labels in constructor"constraintXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\" and count(src:init/src:expr/src:call/src:argument_list/src:argument)>0]"]},{"index": "6","title": "Communication between artifacts should be indirected through a Command","description": "IF an Artifact needs to communicate with another artifact\nTHEN it should create a Command describing the desired action to be performed.\nEach Artifact exists in a separate shard, which may execute in parallel on a separate server. An artifact may communicate with another artifact by creating a Command which describes the action that it wishes the receiving Artifact to perform.","tags": ["Sharding","Command","Entity","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/commands","src/com/crowdcoding/entities"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED","quantifierQueryType": "FIND_FROM_TEXT",// Calling constructors of all entity objects"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"],"constraintQueryType": "RETURN_TO_BASE",// Calling constructors of allowed entity objects","constraintXPathQuery": ["//src:unit/src:class/src:block/src:function_decl[src:name/text()=\"execute\"]/src:parameter_list/src:parameter/src:decl/src:type/src:name[not(text()=\"String\")]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\" or (src:super/src:extends/src:name/text()=\"<TEMP>\")]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"]},{"index": "11","title": "@Entity classes must be registered in the CrowdServlet class","description": "IF a class is an Entity class or subclass \nTHEN it must be registered in 'CrowdServlet' class by ObjectifyService.\nAll entities needs to be registered with Objectify, so that Objectify knows to persist them. The registration must be done in 'CrowdServlet.java'","tags": ["Entity","Objectify","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/entities","src/com/crowdcoding/servlets"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED",// Entity classes"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]"],"constraintQueryType": "FIND_FROM_TEXT",// Registered classes"constraintXPathQuery": ["//src:unit/src:class[src:name/text()=\"CrowdServlet\"]//src:expr_stmt/src:expr/src:call[src:name/src:name/text()=\"ObjectifyService\" and src:name/src:name/text()=\"register\"]/src:argument_list/src:argument/src:expr/src:name/src:name[1]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\"]"]}]

tagTable.json

There is also another json file named tagTable.json. In this file we store information about tags. Here is an example for this file:

[{"ID": "0","tagName": "Labeling","detail": "Rules about labeling the items used in the application. The labeling must follows special policies."},{"ID": "1","tagName": "Objects","detail": "Rules about object created in the application. For each object there might be some constraints and considerations."}]

RulePad Grammar

This system is using ANTLR4.

  • The grammar is stored in rulePadGrammar.g4
  • The generated code with ANTLR is created through gradle script.
  • The gradle.build file is located in the root directory of the project.
  • Run gradle generateParser

Clearing Search history in IntelliJ (for Learning Design Rules)

Edit the related workspace xml file in this directory (in MacOS): ~/Library/Application Support/JetBrains/IntelliJIdea2020.1/workspace

Used Ports

Three ports are used for this application:

  • 8887 for websocket
  • 3000 for application server (Changing Frequently, check package.json for the active port)

Dev Reports

Currently, there are issues in upgrading the dependencies. If devDependencies are updated, then antlr-4 become incompatible unless a configuration of Webpack is changed. If only "react-scripts" is updated to "^4.0.3", then there would be warning about eslint that can be removed by adding SKIP_PREFLIGHT_CHECK=true to the .env file. To install, npm install --legacy-peer-deps should be used.

About

React, React-Bootstrap

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - devuxd/active-doc-client: React, React-Bootstrap · GitHub
Skip to content

Repository files navigation

Active Documentation

This app is written in "React" framework.

  • It communicates with the IDE Connector using "Web-Socket".
  • It is based on srcML library, which should be installed as instructed here.

spmf.jar

This file is required for FP_MAX selectedAlgorithm (for mining design rules) to execute. It can be downloaded from this repository or here. The file should be copied/moved to the root directory of the project.

ruleTable.json

There must be a file name ruleTable.json in the project folder in which all rules are stored. grammar field is recently added for each rule. It is mandatory but is generated for newly added rules. Here is an example for this file:

[{"index": "1","title": "All Buttons must have a title","description": "IF a JButton is created\nTHEN it should be initialized and have a title upon creating.","tags": ["Labeling"],"checkForFilesFolders": ["src"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "WITHIN",// JButtons"quantifierXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\"]"],// JButtons with labels in constructor"constraintXPathQuery": ["src:unit/src:class/src:block//src:decl_stmt/src:decl[src:type/src:name/text()=\"JButton\" and count(src:init/src:expr/src:call/src:argument_list/src:argument)>0]"]},{"index": "6","title": "Communication between artifacts should be indirected through a Command","description": "IF an Artifact needs to communicate with another artifact\nTHEN it should create a Command describing the desired action to be performed.\nEach Artifact exists in a separate shard, which may execute in parallel on a separate server. An artifact may communicate with another artifact by creating a Command which describes the action that it wishes the receiving Artifact to perform.","tags": ["Sharding","Command","Entity","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/commands","src/com/crowdcoding/entities"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED","quantifierQueryType": "FIND_FROM_TEXT",// Calling constructors of all entity objects"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"],"constraintQueryType": "RETURN_TO_BASE",// Calling constructors of allowed entity objects","constraintXPathQuery": ["//src:unit/src:class/src:block/src:function_decl[src:name/text()=\"execute\"]/src:parameter_list/src:parameter/src:decl/src:type/src:name[not(text()=\"String\")]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\" or (src:super/src:extends/src:name/text()=\"<TEMP>\")]/src:name/text()","//src:unit/src:class[src:super/src:extends/src:name/text()=\"Command\"]/src:block/src:class/src:block/descendant-or-self::src:decl_stmt/src:decl[src:init/src:expr/src:call/src:name/text()=\"<TEMP>\"]"]},{"index": "11","title": "@Entity classes must be registered in the CrowdServlet class","description": "IF a class is an Entity class or subclass \nTHEN it must be registered in 'CrowdServlet' class by ObjectifyService.\nAll entities needs to be registered with Objectify, so that Objectify knows to persist them. The registration must be done in 'CrowdServlet.java'","tags": ["Entity","Objectify","Persistence"],"checkForFilesFolders": ["src/com/crowdcoding/entities","src/com/crowdcoding/servlets"],"checkForFilesFoldersConstraints": "INCLUDE","processFilesFolders": "MIXED",// Entity classes"quantifierXPathQuery": ["//src:unit/src:class[(src:annotation/src:name[text()=\"Entity\"] or src:annotation/src:name[text()=\"Subclass\"])]"],"constraintQueryType": "FIND_FROM_TEXT",// Registered classes"constraintXPathQuery": ["//src:unit/src:class[src:name/text()=\"CrowdServlet\"]//src:expr_stmt/src:expr/src:call[src:name/src:name/text()=\"ObjectifyService\" and src:name/src:name/text()=\"register\"]/src:argument_list/src:argument/src:expr/src:name/src:name[1]/text()","//src:unit/src:class[src:name/text()=\"<TEMP>\"]"]}]

tagTable.json

There is also another json file named tagTable.json. In this file we store information about tags. Here is an example for this file:

[{"ID": "0","tagName": "Labeling","detail": "Rules about labeling the items used in the application. The labeling must follows special policies."},{"ID": "1","tagName": "Objects","detail": "Rules about object created in the application. For each object there might be some constraints and considerations."}]

RulePad Grammar

This system is using ANTLR4.

  • The grammar is stored in rulePadGrammar.g4
  • The generated code with ANTLR is created through gradle script.
  • The gradle.build file is located in the root directory of the project.
  • Run gradle generateParser

Clearing Search history in IntelliJ (for Learning Design Rules)

Edit the related workspace xml file in this directory (in MacOS): ~/Library/Application Support/JetBrains/IntelliJIdea2020.1/workspace

Used Ports

Three ports are used for this application:

  • 8887 for websocket
  • 3000 for application server (Changing Frequently, check package.json for the active port)

Dev Reports

Currently, there are issues in upgrading the dependencies. If devDependencies are updated, then antlr-4 become incompatible unless a configuration of Webpack is changed. If only "react-scripts" is updated to "^4.0.3", then there would be warning about eslint that can be removed by adding SKIP_PREFLIGHT_CHECK=true to the .env file. To install, npm install --legacy-peer-deps should be used.

About

React, React-Bootstrap

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages